/*---------------------------------------------------------------------------* Project: NintendoWare File: dev_DirectPrint.h Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 18106 $ *---------------------------------------------------------------------------*/ #ifndef NW_DEV_DIRECTPRINT_H_ #define NW_DEV_DIRECTPRINT_H_ #include #include #include #include #include #include namespace nw { namespace dev { #ifdef NW_DEV_ENABLED namespace internal { //--------------------------------------------------------------------------- //! @brief フレームバッファの情報をあらわすクラスです。 //--------------------------------------------------------------------------- struct FrameBufferInfo { //! @brief コンストラクタです。 //! //! @details //! メンバーの初期化は行いません。 //! FrameBufferInfo() { } //! @brief コンストラクタです。 FrameBufferInfo( u8* address, GLuint format, u16 width, u16 height) : m_Address(address), m_Format(format), m_Width(width), m_Height(height) { } //! バッファのメモリアドレスです。 u8* m_Address; //! バッファのフォーマットです。 GLuint m_Format; //! バッファの幅(ピクセル数)です。 u16 m_Width; //! バッファの高さ(ピクセル数)です。 u16 m_Height; }; } // namespace internal //--------------------------------------------------------------------------- //! @brief フレームバッファに直接描画するクラスです。 //--------------------------------------------------------------------------- class DirectPrint { public: //! 描画の向きを表します。 enum Direction { //! 画面を横に広く使うモードです。 DIRECTION_HORIZONTAL, //! 画面を縦に広く使うモードです。 DIRECTION_VERTICAL, //! :private DIRECTION_MAX }; //---------------------------------------- //! @name コンストラクタ/デストラクタ // @{ //! @brief コンストラクタです。 DirectPrint(); //! @brief デストラクタです。 ~DirectPrint(); // @} //---------------------------------------- //! @name 初期化/終了処理 // @{ //! @brief ダイレクトプリント機能を初期化します。 void Initialize(); //! @brief リソースを開放します。 //! //! @details //! デストラクタの呼び出し以前にリソースを開放したい場合に使用します。 //! void Finalize(); //! @brief ダイレクトプリント機能が使用可能な常態かを返します。 bool IsActive() const; // @} //---------------------------------------- //! @name 設定 // @{ //! @brief 描画対象となるフレームバッファを設定します。 //! //! @param buffer フレームバッファへのポインタです。 //! @param format フレームバッファのフォーマットです。 //! @param width フレームバッファの幅です。(ピクセル, 8の倍数) //! @param height フレームバッファの高さです。(ピクセル, 8の倍数) //! void SetTargetBuffer( void *buffer, GLuint format, u16 width, u16 height); //! @brief 描画対象となるフレームバッファを設定します。 //! //! @details //! フレームバッファに関するその他のパラメータは以前の設定が //! そのまま使われます。 //! //! @param buffer フレームバッファへのポインタです。 //! void SetTargetBuffer(void *buffer); //! @brief 描画対象のフレームバッファに //! 現在アクティブなディスプレイバッファを設定します。 //! //! @remark //! 実機のみ利用できます。 //! void SetTargetActiveDisplayBuffer(); //! @brief 現在設定されている描画対象のフレームバッファを取得します。 //! //! @return フレームバッファのアドレスを返します。 //! void* GetTargetBuffer() const { return m_Buffer.m_Address; } //! @brief 現在設定されている描画対象の幅を取得します。 //! //! @return フレームバッファの幅を返します。 //! u16 GetTargetWidth() const { return m_Buffer.m_Width; } //! @brief 現在設定されている描画対象の高さを取得します。 //! //! @return フレームバッファの高さを返します。 //! u16 GetTargetHeight() const { return m_Buffer.m_Height; } //! @brief 描画色を設定します。 //! //! @param color 描画色です。 //! void SetColor(ut::Color8 color); //! @brief 描画色を設定します。 //! //! @param r 文字描画色の赤成分です。 //! @param g 文字描画色の緑成分です。 //! @param b 文字描画色の青成分です。 //! void SetColor(u8 r, u8 g, u8 b); //! @brief 現在の描画色を取得します。 //! //! @return 描画色を返します。 //! ut::Color8 GetColor() const; //! @brief 描画の方向を指定します。 //! //! @details //! 描画方向はDIRECTION_VERTICALに初期化されます。 //! //! @param direction 描画の方向です。 //! //! @sa GetDirection //! void SetDirection(Direction direction); //! @brief 描画の方向を取得します。 //! //! @return 描画の方向を返します。 //! //! @sa SetDirection //! Direction GetDirection() const; // @} //---------------------------------------- //! @name 描画 // @{ //! @brief 矩形領域を暗くします。 //! //! @param x 矩形領域の位置(X方向成分)です。 //! @param y 矩形領域の位置(Y方向成分)です。 //! @param width 矩形領域の幅です。 //! @param height 矩形領域の高さです。 //! void Erase(int x, int y, int width, int height); //! @brief 文字列を描画します。 //! //! @details //! 描画される文字列の後ろの矩形領域は暗く表示されます。 //! 行右端で折り返します。 //! //! @param x 描画開始位置(X方向成分)です。 //! @param y 描画開始位置(Y方向成分)です。 //! @param format 文字列のフォーマットです。 //! void Printf(int x, int y, const char* format, ...); //! @brief 文字列を描画します。 //! //! @details //! 描画される文字列の後ろの矩形領域は暗く表示されます。 //! //! @param x 描画開始位置(X方向成分)です。 //! @param y 描画開始位置(Y方向成分)です。 //! @param turnOver 行右端で折り返す場合には true を指定します。 //! @param format 文字列のフォーマットです。 //! void Printf(int x, int y, bool turnOver, const char* format, ...); //! @brief 文字列を描画します。 //! //! @param x 描画開始位置(X方向成分)です。 //! @param y 描画開始位置(Y方向成分)です。 //! @param turnOver 行右端で折り返す場合には true を指定します。 //! @param backErase 背景を暗くする場合は true を指定します。 //! @param format 文字列のフォーマットです。 //! void Printf( int x, int y, bool turnOver, bool backErase, const char* format, ...); //! @brief 文字列を描画します。 //! //! @param x 描画開始位置(X方向成分)です。 //! @param y 描画開始位置(Y方向成分)です。 //! @param format 文字列のフォーマットです。 //! @param vargs 可変長引数です。 //! @param turnOver 行右端で折り返す場合には true を指定します。 //! @param backErase 背景を暗くする場合は true を指定します。 //! void VPrintf( int x, int y, const char* format, std::va_list vargs, bool turnOver = true, bool backErase = true); //! @brief 文字列を描画します。 //! //! @param x 描画開始位置(X方向成分)です。 //! @param y 描画開始位置(Y方向成分)です。 //! @param str 文字列です。 //! @param turnOver 行右端で折り返す場合には true を指定します。 //! @param backErase 背景を暗くする場合は true を指定します。 //! void DrawString( int x, int y, const char* str, bool turnOver = true, bool backErase = false); //! @brief 描画された文字列をキャッシュからメモリへストアします。 void StoreCache(); // @} private: //! フレームバッファ情報。 internal::FrameBufferInfo m_Buffer; //! 描画色。 ut::Color8 m_Color; //! 描画方向 Direction m_Direction; //! 初期化が完了しているか。 bool m_Initialized; }; #else class DirectPrint { public: enum Direction { DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_MAX }; DirectPrint(){} ~DirectPrint(){} void Initialize(){} void Finalize(){} bool IsActive() const{ return false; } void SetTargetBuffer( void *, GLuint, u16, u16){} void SetTargetBuffer(void *){} void SetTargetActiveDisplayBuffer(){} void* GetTargetBuffer() const{ return NULL; } u16 GetTargetWidth() const{ return 0; } u16 GetTargetHeight() const{ return 0; } void SetColor(ut::Color8){} void SetColor(u8, u8, u8){} ut::Color8 GetColor() const{ return ut::Color8(); } void SetDirection(Direction){} Direction GetDirection() const{ return Direction(); } void Erase(int, int, int, int){} void Printf(int, int, const char*, ...){} void Printf(int, int, bool, const char*, ...){} void Printf( int, int, bool, bool, const char*, ...) {} void VPrintf( int, int, const char*, std::va_list, bool = true, bool = true) {} void DrawString( int, int, const char*, bool = true, bool = false) {} void StoreCache(){} }; #endif } // namespace nw::dev } // namespace nw #endif // NW_DEV_DIRECTPRINT_H_