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