1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: dev_DirectPrint.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 18106 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_DEV_DIRECTPRINT_H_ 17 #define NW_DEV_DIRECTPRINT_H_ 18 19 #include <nw/types.h> 20 #include <cstdarg> 21 #include <nw/sdk.h> 22 #include <nw/ut.h> 23 #include <gles2/gl2.h> 24 #include <gles2/gl2ext.h> 25 26 namespace nw 27 { 28 namespace dev 29 { 30 31 #ifdef NW_DEV_ENABLED 32 namespace internal 33 { 34 35 //--------------------------------------------------------------------------- 36 //! @brief フレームバッファの情報をあらわすクラスです。 37 //--------------------------------------------------------------------------- 38 struct FrameBufferInfo 39 { 40 //! @brief コンストラクタです。 41 //! 42 //! @details 43 //! メンバーの初期化は行いません。 44 //! FrameBufferInfoFrameBufferInfo45 FrameBufferInfo() 46 { 47 } 48 49 //! @brief コンストラクタです。 FrameBufferInfoFrameBufferInfo50 FrameBufferInfo( 51 u8* address, 52 GLuint format, 53 u16 width, 54 u16 height) 55 : m_Address(address), 56 m_Format(format), 57 m_Width(width), 58 m_Height(height) 59 { 60 } 61 62 //! バッファのメモリアドレスです。 63 u8* m_Address; 64 65 //! バッファのフォーマットです。 66 GLuint m_Format; 67 68 //! バッファの幅(ピクセル数)です。 69 u16 m_Width; 70 71 //! バッファの高さ(ピクセル数)です。 72 u16 m_Height; 73 }; 74 75 } // namespace internal 76 77 //--------------------------------------------------------------------------- 78 //! @brief フレームバッファに直接描画するクラスです。 79 //--------------------------------------------------------------------------- 80 class DirectPrint 81 { 82 public: 83 //! 描画の向きを表します。 84 enum Direction 85 { 86 //! 画面を横に広く使うモードです。 87 DIRECTION_HORIZONTAL, 88 //! 画面を縦に広く使うモードです。 89 DIRECTION_VERTICAL, 90 //! :private 91 DIRECTION_MAX 92 }; 93 94 //---------------------------------------- 95 //! @name コンストラクタ/デストラクタ 96 // @{ 97 98 //! @brief コンストラクタです。 99 DirectPrint(); 100 101 //! @brief デストラクタです。 102 ~DirectPrint(); 103 104 // @} 105 106 //---------------------------------------- 107 //! @name 初期化/終了処理 108 // @{ 109 110 //! @brief ダイレクトプリント機能を初期化します。 111 void Initialize(); 112 113 //! @brief リソースを開放します。 114 //! 115 //! @details 116 //! デストラクタの呼び出し以前にリソースを開放したい場合に使用します。 117 //! 118 void Finalize(); 119 120 //! @brief ダイレクトプリント機能が使用可能な常態かを返します。 121 bool IsActive() const; 122 123 // @} 124 125 //---------------------------------------- 126 //! @name 設定 127 // @{ 128 129 //! @brief 描画対象となるフレームバッファを設定します。 130 //! 131 //! @param buffer フレームバッファへのポインタです。 132 //! @param format フレームバッファのフォーマットです。 133 //! @param width フレームバッファの幅です。(ピクセル, 8の倍数) 134 //! @param height フレームバッファの高さです。(ピクセル, 8の倍数) 135 //! 136 void SetTargetBuffer( 137 void *buffer, 138 GLuint format, 139 u16 width, 140 u16 height); 141 142 //! @brief 描画対象となるフレームバッファを設定します。 143 //! 144 //! @details 145 //! フレームバッファに関するその他のパラメータは以前の設定が 146 //! そのまま使われます。 147 //! 148 //! @param buffer フレームバッファへのポインタです。 149 //! 150 void SetTargetBuffer(void *buffer); 151 152 //! @brief 描画対象のフレームバッファに 153 //! 現在アクティブなディスプレイバッファを設定します。 154 //! 155 //! @remark 156 //! 実機のみ利用できます。 157 //! 158 void SetTargetActiveDisplayBuffer(); 159 160 //! @brief 現在設定されている描画対象のフレームバッファを取得します。 161 //! 162 //! @return フレームバッファのアドレスを返します。 163 //! GetTargetBuffer()164 void* GetTargetBuffer() const 165 { 166 return m_Buffer.m_Address; 167 } 168 169 //! @brief 現在設定されている描画対象の幅を取得します。 170 //! 171 //! @return フレームバッファの幅を返します。 172 //! GetTargetWidth()173 u16 GetTargetWidth() const 174 { 175 return m_Buffer.m_Width; 176 } 177 178 //! @brief 現在設定されている描画対象の高さを取得します。 179 //! 180 //! @return フレームバッファの高さを返します。 181 //! GetTargetHeight()182 u16 GetTargetHeight() const 183 { 184 return m_Buffer.m_Height; 185 } 186 187 //! @brief 描画色を設定します。 188 //! 189 //! @param color 描画色です。 190 //! 191 void SetColor(ut::Color8 color); 192 193 //! @brief 描画色を設定します。 194 //! 195 //! @param r 文字描画色の赤成分です。 196 //! @param g 文字描画色の緑成分です。 197 //! @param b 文字描画色の青成分です。 198 //! 199 void SetColor(u8 r, u8 g, u8 b); 200 201 //! @brief 現在の描画色を取得します。 202 //! 203 //! @return 描画色を返します。 204 //! 205 ut::Color8 GetColor() const; 206 207 //! @brief 描画の方向を指定します。 208 //! 209 //! @details 210 //! 描画方向はDIRECTION_VERTICALに初期化されます。 211 //! 212 //! @param direction 描画の方向です。 213 //! 214 //! @sa GetDirection 215 //! 216 void SetDirection(Direction direction); 217 218 //! @brief 描画の方向を取得します。 219 //! 220 //! @return 描画の方向を返します。 221 //! 222 //! @sa SetDirection 223 //! 224 Direction GetDirection() const; 225 226 // @} 227 228 //---------------------------------------- 229 //! @name 描画 230 // @{ 231 232 //! @brief 矩形領域を暗くします。 233 //! 234 //! @param x 矩形領域の位置(X方向成分)です。 235 //! @param y 矩形領域の位置(Y方向成分)です。 236 //! @param width 矩形領域の幅です。 237 //! @param height 矩形領域の高さです。 238 //! 239 void Erase(int x, int y, int width, int height); 240 241 //! @brief 文字列を描画します。 242 //! 243 //! @details 244 //! 描画される文字列の後ろの矩形領域は暗く表示されます。 245 //! 行右端で折り返します。 246 //! 247 //! @param x 描画開始位置(X方向成分)です。 248 //! @param y 描画開始位置(Y方向成分)です。 249 //! @param format 文字列のフォーマットです。 250 //! 251 void Printf(int x, int y, const char* format, ...); 252 253 //! @brief 文字列を描画します。 254 //! 255 //! @details 256 //! 描画される文字列の後ろの矩形領域は暗く表示されます。 257 //! 258 //! @param x 描画開始位置(X方向成分)です。 259 //! @param y 描画開始位置(Y方向成分)です。 260 //! @param turnOver 行右端で折り返す場合には true を指定します。 261 //! @param format 文字列のフォーマットです。 262 //! 263 void Printf(int x, int y, bool turnOver, const char* format, ...); 264 265 //! @brief 文字列を描画します。 266 //! 267 //! @param x 描画開始位置(X方向成分)です。 268 //! @param y 描画開始位置(Y方向成分)です。 269 //! @param turnOver 行右端で折り返す場合には true を指定します。 270 //! @param backErase 背景を暗くする場合は true を指定します。 271 //! @param format 文字列のフォーマットです。 272 //! 273 void Printf( 274 int x, 275 int y, 276 bool turnOver, 277 bool backErase, 278 const char* format, 279 ...); 280 281 //! @brief 文字列を描画します。 282 //! 283 //! @param x 描画開始位置(X方向成分)です。 284 //! @param y 描画開始位置(Y方向成分)です。 285 //! @param format 文字列のフォーマットです。 286 //! @param vargs 可変長引数です。 287 //! @param turnOver 行右端で折り返す場合には true を指定します。 288 //! @param backErase 背景を暗くする場合は true を指定します。 289 //! 290 void VPrintf( 291 int x, 292 int y, 293 const char* format, 294 std::va_list vargs, 295 bool turnOver = true, 296 bool backErase = true); 297 298 //! @brief 文字列を描画します。 299 //! 300 //! @param x 描画開始位置(X方向成分)です。 301 //! @param y 描画開始位置(Y方向成分)です。 302 //! @param str 文字列です。 303 //! @param turnOver 行右端で折り返す場合には true を指定します。 304 //! @param backErase 背景を暗くする場合は true を指定します。 305 //! 306 void DrawString( 307 int x, 308 int y, 309 const char* str, 310 bool turnOver = true, 311 bool backErase = false); 312 313 //! @brief 描画された文字列をキャッシュからメモリへストアします。 314 void StoreCache(); 315 316 // @} 317 318 private: 319 //! フレームバッファ情報。 320 internal::FrameBufferInfo m_Buffer; 321 322 //! 描画色。 323 ut::Color8 m_Color; 324 325 //! 描画方向 326 Direction m_Direction; 327 328 //! 初期化が完了しているか。 329 bool m_Initialized; 330 }; 331 332 #else 333 class DirectPrint 334 { 335 public: 336 enum Direction 337 { 338 DIRECTION_HORIZONTAL, 339 DIRECTION_VERTICAL, 340 DIRECTION_MAX 341 }; 342 343 DirectPrint(){} 344 345 ~DirectPrint(){} 346 347 void Initialize(){} 348 349 void Finalize(){} 350 351 bool IsActive() const{ return false; } 352 353 void SetTargetBuffer( 354 void *, 355 GLuint, 356 u16, 357 u16){} 358 359 void SetTargetBuffer(void *){} 360 361 void SetTargetActiveDisplayBuffer(){} 362 363 void* GetTargetBuffer() const{ return NULL; } 364 365 u16 GetTargetWidth() const{ return 0; } 366 367 u16 GetTargetHeight() const{ return 0; } 368 369 void SetColor(ut::Color8){} 370 371 void SetColor(u8, u8, u8){} 372 373 ut::Color8 GetColor() const{ return ut::Color8(); } 374 375 void SetDirection(Direction){} 376 377 Direction GetDirection() const{ return Direction(); } 378 379 void Erase(int, int, int, int){} 380 381 void Printf(int, int, const char*, ...){} 382 383 void Printf(int, int, bool, const char*, ...){} 384 385 void Printf( 386 int, 387 int, 388 bool, 389 bool, 390 const char*, 391 ...) 392 {} 393 394 void VPrintf( 395 int, 396 int, 397 const char*, 398 std::va_list, 399 bool = true, 400 bool = true) 401 {} 402 403 void DrawString( 404 int, 405 int, 406 const char*, 407 bool = true, 408 bool = false) 409 {} 410 411 void StoreCache(){} 412 }; 413 #endif 414 415 } // namespace nw::dev 416 } // namespace nw 417 418 #endif // NW_DEV_DIRECTPRINT_H_ 419