/*---------------------------------------------------------------------------* Project: NintendoWare File: lyt_Picture.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: 25594 $ *---------------------------------------------------------------------------*/ #ifndef NW_LYT_PICTURE_H_ #define NW_LYT_PICTURE_H_ #include #include #include #include #include namespace nw { namespace lyt { class DrawInfo; //--------------------------------------------------------------------------- //! :category 描画 //! //! @brief 画像の表示を行うペインです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class Picture : public Pane { typedef Pane Base; public: //! 実行時型情報です。 NW_UT_RUNTIME_TYPEINFO; //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! 指定したテクスチャの枚数分のメモリを確保して、オブジェクトを生成します。 //! //! @param texNum 使用するテクスチャの最大数です。 //! //! @since 2009/09/18 初版。 //! explicit Picture(u8 texNum); //! @brief コンストラクタです。 //! //! @details //! 指定したテクスチャを使用するオブジェクトを生成します。 //! 保持できるテクスチャ座標の数は 1 に設定されます。 //! //! @param texMap TexMap への参照です。 //! //! @since 2009/09/18 初版。 //! explicit Picture(const TexMap& texMap); //! @brief コンストラクタです。 //! //! @details //! 指定したリソースからオブジェクトを生成します。 //! //! @param pBlock リソースへのポインタです。 //! @param resBlockSet ResBlockSet への参照です。 //! //! @since 2009/09/18 初版。 //! Picture( const res::Picture* pBlock, const ResBlockSet& resBlockSet); //! @brief デストラクタです。 //! //! @since 2009/09/18 初版。 //! virtual ~Picture(); //@} //---------------------------------------- //! @name 設定/取得 //@{ //! @brief テクスチャを追加します。 //! //! @param texMap TexMap への参照です。 //! //! @since 2009/09/18 初版。 //! virtual void Append(const TexMap& texMap); //! @brief 頂点カラーを取得します。 //! //! @details //! idx で指定した頂点カラーを取得します。 //! //! @param idx インデックスです。 lyt::VertexColor を指定します。 //! //! @return カラーを返します。 //! //! @sa SetVtxColor //! @sa GetVtxColorElement //! @sa lyt::VertexColor //! //! @since 2009/09/18 初版。 //! virtual const ut::Color8 GetVtxColor(u32 idx) const; //! @brief 頂点カラーを設定します。 //! //! @param idx インデックスです。 lyt::VertexColor を指定します。 //! @param value 頂点カラーです。 //! //! @sa GetVtxColor //! @sa SetVtxColorElement //! @sa lyt::VertexColor //! //! @since 2009/09/18 初版。 //! virtual void SetVtxColor(u32 idx, ut::Color8 value); //! @brief 頂点カラーの成分を取得します。 //! //! @details //! idx で指定した頂点カラーの成分を取得します。 //! //! idx の指定には lyt::ANIMTARGET_VERTEXCOLOR_* を使用してください。 //! //! @param idx インデックスです。 //! //! @return 頂点カラーの成分を返します。 lyt::AnimTargetPaneColor を指定します。 //! //! @sa SetVtxColorElement //! @sa GetVtxColor //! @sa lyt::AnimTargetPaneColor //! //! @since 2009/09/18 初版。 //! virtual u8 GetVtxColorElement(u32 idx) const; //! @brief 頂点カラーの成分を設定します。 //! //! idx の指定には lyt::ANIMTARGET_VERTEXCOLOR_* を使用してください。 //! //! @param idx インデックスです。 lyt::AnimTargetPaneColor を指定します。 //! @param value カラーの成分値です。 //! //! @sa GetVtxColorElement //! @sa SetVtxColor //! @sa lyt::AnimTargetPaneColor //! //! @since 2009/09/18 初版。 //! virtual void SetVtxColorElement(u32 idx, u8 value); //! @brief テクスチャ座標を保持するためのメモリ領域を確保します。 //! //! @details //! 保持可能なテクスチャ座標の数の初期値はコンストラクタによって異なります。 //! //! @param num テクスチャ座標の保持数です。 //! //! @sa Picture::Picture //! //! @since 2009/09/18 初版。 //! void ReserveTexCoord(u8 num); //! @brief テクスチャ座標の保持数を取得します。 //! //! @return 保持しているテクスチャ座標の数を返します。 //! //! @sa SetTexCoordNum //! //! @since 2009/09/18 初版。 //! u8 GetTexCoordNum() const; //! @brief テクスチャ座標の保持数を設定します。 //! //! @details //! num に指定できる値は保持可能なテクスチャ座標数以下でなければなりません。 //! //! @param num テクスチャ座標の保持数です。 //! //! @sa GetTexCoordNum //! @sa ReserveTexCoord //! @sa Picture::Picture //! @sa GetTexCoord //! //! @since 2009/09/18 初版。 //! void SetTexCoordNum(u8 num); //! @brief テクスチャ座標を取得します。 //! //! @param idx インデックスです。 //! @param[out] coords テクスチャ座標を格納する領域へのポインタです。 //! //! @sa SetTexCoord //! //! @since 2009/09/18 初版。 //! void GetTexCoord(u32 idx, TexCoordQuad coords) const; //! @brief テクスチャ座標を設定します。 //! //! @param idx インデックスです。 //! @param coords テクスチャ座標です。 //! //! @sa GetTexCoord //! //! @since 2009/09/18 初版。 //! void SetTexCoord(u32 idx, const TexCoordQuad coords); using Base::GetMaterial; //! @brief ペインが持つマテリアルの数を取得します。 //! //! @return マテリアルを持っていれば 1 を返します。 //! //! @since 2009/09/18 初版。 //! virtual u8 GetMaterialNum() const; //! @brief ペインのマテリアルを取得します。 //! //! @details //! idx には 0 のみ指定できます。 //! //! @param idx インデックスです。 //! //! @return マテリアルへのポインタを返します。 //! //! @sa SetMaterial //! //! @since 2009/09/18 初版。 //! virtual Material* GetMaterial(u32 idx) const; //! @brief マテリアルを設定します。 //! //! @details //! 現在設定されているマテリアルが Picture オブジェクトの生成時に //! 同時に生成されたものだった場合には、そのマテリアルは破棄されます。 //! //! @param pMaterial マテリアルへのポインタです。 //! //! @since 2009/09/18 初版。 //! void SetMaterial(Material* pMaterial); //@} #ifdef NW_LYT_DRAWER_ENABLE public : // 仮実装はlyt_Drawer.cppに書いてます virtual void MakeUniformDataSelf( DrawInfo* pDrawInfo, Drawer* pDrawer ) const; private : // 処理削減のためにDrawer が使う // テクスチャ座標が初期化済みかどうか mutable bool m_IsTexCoordInited; // テクスチャ座標の数のキャッシュ mutable u32 m_UniformTexCoordNum; // テクスチャ座標のキャッシュ mutable nw::math::VEC4 m_UniformTexCoords[ TexMapMax * 2 ]; #endif protected: #ifdef NW_LYT_DMPGL_ENABLED virtual void DrawSelf(const DrawInfo& drawInfo); #endif private: void Init(u8 texNum); Material* m_pMaterial; ut::Color8 m_VtxColors[VERTEXCOLOR_MAX]; internal::TexCoordAry m_TexCoordAry; private: // コピーコンストラクタと代入演算子の呼び出しを禁止します。実装してはいけません。 Picture(const Picture& other); Picture& operator = (const Picture& other); }; } // namespace nw::lyt } // namespace nw #endif // NW_LYT_PICTURE_H_