1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: lyt_Picture.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: 25594 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_LYT_PICTURE_H_ 17 #define NW_LYT_PICTURE_H_ 18 19 #include <nw/ut/ut_Color.h> 20 #include <nw/ut/ut_RuntimeTypeInfo.h> 21 22 #include <nw/lyt/lyt_Config.h> 23 #include <nw/lyt/lyt_Material.h> 24 #include <nw/lyt/lyt_Pane.h> 25 26 namespace nw 27 { 28 namespace lyt 29 { 30 31 class DrawInfo; 32 33 //--------------------------------------------------------------------------- 34 //! :category 描画 35 //! 36 //! @brief 画像の表示を行うペインです。 37 //! 38 //! @since 2009/09/18 初版。 39 //--------------------------------------------------------------------------- 40 class Picture : public Pane 41 { 42 typedef Pane Base; 43 44 public: 45 //! 実行時型情報です。 46 NW_UT_RUNTIME_TYPEINFO; 47 48 //---------------------------------------- 49 //! @name コンストラクタ/デストラクタ 50 //@{ 51 52 //! @brief コンストラクタです。 53 //! 54 //! @details 55 //! 指定したテクスチャの枚数分のメモリを確保して、オブジェクトを生成します。 56 //! 57 //! @param texNum 使用するテクスチャの最大数です。 58 //! 59 //! @since 2009/09/18 初版。 60 //! 61 explicit Picture(u8 texNum); 62 63 //! @brief コンストラクタです。 64 //! 65 //! @details 66 //! 指定したテクスチャを使用するオブジェクトを生成します。 67 //! 保持できるテクスチャ座標の数は 1 に設定されます。 68 //! 69 //! @param texMap TexMap への参照です。 70 //! 71 //! @since 2009/09/18 初版。 72 //! 73 explicit Picture(const TexMap& texMap); 74 75 //! @brief コンストラクタです。 76 //! 77 //! @details 78 //! 指定したリソースからオブジェクトを生成します。 79 //! 80 //! @param pBlock リソースへのポインタです。 81 //! @param resBlockSet ResBlockSet への参照です。 82 //! 83 //! @since 2009/09/18 初版。 84 //! 85 Picture( 86 const res::Picture* pBlock, 87 const ResBlockSet& resBlockSet); 88 89 //! @brief デストラクタです。 90 //! 91 //! @since 2009/09/18 初版。 92 //! 93 virtual ~Picture(); 94 95 //@} 96 97 //---------------------------------------- 98 //! @name 設定/取得 99 //@{ 100 101 //! @brief テクスチャを追加します。 102 //! 103 //! @param texMap TexMap への参照です。 104 //! 105 //! @since 2009/09/18 初版。 106 //! 107 virtual void Append(const TexMap& texMap); 108 109 //! @brief 頂点カラーを取得します。 110 //! 111 //! @details 112 //! idx で指定した頂点カラーを取得します。 113 //! 114 //! @param idx インデックスです。 lyt::VertexColor を指定します。 115 //! 116 //! @return カラーを返します。 117 //! 118 //! @sa SetVtxColor 119 //! @sa GetVtxColorElement 120 //! @sa lyt::VertexColor 121 //! 122 //! @since 2009/09/18 初版。 123 //! 124 virtual const ut::Color8 GetVtxColor(u32 idx) const; 125 126 //! @brief 頂点カラーを設定します。 127 //! 128 //! @param idx インデックスです。 lyt::VertexColor を指定します。 129 //! @param value 頂点カラーです。 130 //! 131 //! @sa GetVtxColor 132 //! @sa SetVtxColorElement 133 //! @sa lyt::VertexColor 134 //! 135 //! @since 2009/09/18 初版。 136 //! 137 virtual void SetVtxColor(u32 idx, ut::Color8 value); 138 139 //! @brief 頂点カラーの成分を取得します。 140 //! 141 //! @details 142 //! idx で指定した頂点カラーの成分を取得します。 143 //! 144 //! idx の指定には lyt::ANIMTARGET_VERTEXCOLOR_* を使用してください。 145 //! 146 //! @param idx インデックスです。 147 //! 148 //! @return 頂点カラーの成分を返します。 lyt::AnimTargetPaneColor を指定します。 149 //! 150 //! @sa SetVtxColorElement 151 //! @sa GetVtxColor 152 //! @sa lyt::AnimTargetPaneColor 153 //! 154 //! @since 2009/09/18 初版。 155 //! 156 virtual u8 GetVtxColorElement(u32 idx) const; 157 158 //! @brief 頂点カラーの成分を設定します。 159 //! 160 //! idx の指定には lyt::ANIMTARGET_VERTEXCOLOR_* を使用してください。 161 //! 162 //! @param idx インデックスです。 lyt::AnimTargetPaneColor を指定します。 163 //! @param value カラーの成分値です。 164 //! 165 //! @sa GetVtxColorElement 166 //! @sa SetVtxColor 167 //! @sa lyt::AnimTargetPaneColor 168 //! 169 //! @since 2009/09/18 初版。 170 //! 171 virtual void SetVtxColorElement(u32 idx, u8 value); 172 173 //! @brief テクスチャ座標を保持するためのメモリ領域を確保します。 174 //! 175 //! @details 176 //! 保持可能なテクスチャ座標の数の初期値はコンストラクタによって異なります。 177 //! 178 //! @param num テクスチャ座標の保持数です。 179 //! 180 //! @sa Picture::Picture 181 //! 182 //! @since 2009/09/18 初版。 183 //! 184 void ReserveTexCoord(u8 num); 185 186 //! @brief テクスチャ座標の保持数を取得します。 187 //! 188 //! @return 保持しているテクスチャ座標の数を返します。 189 //! 190 //! @sa SetTexCoordNum 191 //! 192 //! @since 2009/09/18 初版。 193 //! 194 u8 GetTexCoordNum() const; 195 196 //! @brief テクスチャ座標の保持数を設定します。 197 //! 198 //! @details 199 //! num に指定できる値は保持可能なテクスチャ座標数以下でなければなりません。 200 //! 201 //! @param num テクスチャ座標の保持数です。 202 //! 203 //! @sa GetTexCoordNum 204 //! @sa ReserveTexCoord 205 //! @sa Picture::Picture 206 //! @sa GetTexCoord 207 //! 208 //! @since 2009/09/18 初版。 209 //! 210 void SetTexCoordNum(u8 num); 211 212 //! @brief テクスチャ座標を取得します。 213 //! 214 //! @param idx インデックスです。 215 //! @param[out] coords テクスチャ座標を格納する領域へのポインタです。 216 //! 217 //! @sa SetTexCoord 218 //! 219 //! @since 2009/09/18 初版。 220 //! 221 void GetTexCoord(u32 idx, TexCoordQuad coords) const; 222 223 //! @brief テクスチャ座標を設定します。 224 //! 225 //! @param idx インデックスです。 226 //! @param coords テクスチャ座標です。 227 //! 228 //! @sa GetTexCoord 229 //! 230 //! @since 2009/09/18 初版。 231 //! 232 void SetTexCoord(u32 idx, const TexCoordQuad coords); 233 234 using Base::GetMaterial; 235 236 //! @brief ペインが持つマテリアルの数を取得します。 237 //! 238 //! @return マテリアルを持っていれば 1 を返します。 239 //! 240 //! @since 2009/09/18 初版。 241 //! 242 virtual u8 GetMaterialNum() const; 243 244 //! @brief ペインのマテリアルを取得します。 245 //! 246 //! @details 247 //! idx には 0 のみ指定できます。 248 //! 249 //! @param idx インデックスです。 250 //! 251 //! @return マテリアルへのポインタを返します。 252 //! 253 //! @sa SetMaterial 254 //! 255 //! @since 2009/09/18 初版。 256 //! 257 virtual Material* GetMaterial(u32 idx) const; 258 259 //! @brief マテリアルを設定します。 260 //! 261 //! @details 262 //! 現在設定されているマテリアルが Picture オブジェクトの生成時に 263 //! 同時に生成されたものだった場合には、そのマテリアルは破棄されます。 264 //! 265 //! @param pMaterial マテリアルへのポインタです。 266 //! 267 //! @since 2009/09/18 初版。 268 //! 269 void SetMaterial(Material* pMaterial); 270 271 //@} 272 273 #ifdef NW_LYT_DRAWER_ENABLE 274 public : 275 276 // 仮実装はlyt_Drawer.cppに書いてます 277 virtual void MakeUniformDataSelf( DrawInfo* pDrawInfo, Drawer* pDrawer ) const; 278 279 private : // 処理削減のためにDrawer が使う 280 281 // テクスチャ座標が初期化済みかどうか 282 mutable bool m_IsTexCoordInited; 283 284 // テクスチャ座標の数のキャッシュ 285 mutable u32 m_UniformTexCoordNum; 286 287 // テクスチャ座標のキャッシュ 288 mutable nw::math::VEC4 m_UniformTexCoords[ TexMapMax * 2 ]; 289 290 #endif 291 292 protected: 293 #ifdef NW_LYT_DMPGL_ENABLED 294 virtual void DrawSelf(const DrawInfo& drawInfo); 295 #endif 296 297 private: 298 void Init(u8 texNum); 299 300 Material* m_pMaterial; 301 ut::Color8 m_VtxColors[VERTEXCOLOR_MAX]; 302 internal::TexCoordAry m_TexCoordAry; 303 304 private: 305 // コピーコンストラクタと代入演算子の呼び出しを禁止します。実装してはいけません。 306 Picture(const Picture& other); 307 Picture& operator = (const Picture& other); 308 }; 309 310 } // namespace nw::lyt 311 } // namespace nw 312 313 #endif // NW_LYT_PICTURE_H_ 314 315