1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: lyt_Material.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: 26780 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_LYT_MATERIAL_H_ 17 #define NW_LYT_MATERIAL_H_ 18 19 //#include <revolution/tpl.h> 20 21 #include <nw/ut/ut_Color.h> 22 #include <nw/math/math_Types.h> 23 24 #include <nw/lyt/lyt_Config.h> 25 #include <nw/lyt/lyt_Drawer.h> 26 #include <nw/lyt/lyt_TexMap.h> 27 #include <nw/lyt/lyt_Types.h> 28 29 namespace nw 30 { 31 namespace lyt 32 { 33 namespace res 34 { 35 36 struct Material; 37 38 } // namespace nw::lyt::res 39 40 namespace internal 41 { 42 43 // Matrix Member Numbers 44 struct MatMemNums 45 { 46 u32 texMap: 2; 47 u32 texSRT: 2; 48 u32 texCoordGen: 2; 49 u32 tevStage: 3; 50 u32 alpComp: 1; 51 u32 blendMode: 1; 52 }; 53 54 } // namespace nw::lyt::internal 55 56 class AnimTransform; 57 class AnimResource; 58 class DrawInfo; 59 class Layout; 60 class TexMap; 61 struct ResBlockSet; 62 63 //--------------------------------------------------------------------------- 64 //! :category 描画 65 //! 66 //! @brief マテリアルの情報クラスです。 67 //! 68 //! @since 2009/09/18 初版。 69 //--------------------------------------------------------------------------- 70 class Material 71 { 72 public: 73 enum 74 { 75 //! ユーザーがマテリアルを構築したかを示します。 76 FLAG_USER_ALLOCATED, 77 //! テクスチャのみを設定します。 78 FLAG_TEXTURE_ONLY, 79 //! テクスチャに関する内部のキャッシュがクリーンなことを示します。 80 FLAG_TEXTURE_CLEAN, 81 //! 列挙子の総数です。 82 FLAG_MAX 83 }; 84 85 //---------------------------------------- 86 //! @name コンストラクタ/デストラクタ 87 //@{ 88 89 //! @brief コンストラクタです。 90 //! 91 //! @details 92 //! デフォルト設定の状態で初期化します。 93 //! 94 //! @since 2009/09/18 初版。 95 //! 96 Material(); 97 98 //! @brief コンストラクタです。 99 //! 100 //! @details 101 //! データブロックを反映した状態で初期化します。 102 //! 103 //! @param pRes マテリアルデータブロックへのポインタです。 104 //! @param resBlockSet ResBlockSet への参照です。 105 //! 106 //! @since 2009/09/18 初版。 107 //! 108 Material( 109 const res::Material* pRes, 110 const ResBlockSet& resBlockSet); 111 112 //! @brief デストラクタです。 113 //! 114 //! @since 2009/09/18 初版。 115 //! 116 virtual ~Material(); 117 118 //@} 119 120 //---------------------------------------- 121 //! @name 取得/設定 122 //@{ 123 124 //! @brief マテリアルの設定を保持する領域を確保します。 125 //! 126 //! @param texMapNum 格納可能なテクスチャの数です。 127 //! @param texSRTNum 格納可能なテクスチャ SRT 変換行列の数です。 128 //! @param texCoordGenNum 格納可能なテクスチャ座標生成の数です。 129 //! @param tevStageNum 格納可能な TEV ステージの数です。 130 //! @param allocAlpComp アルファコンペアの設定領域を確保するには true を指定します。 131 //! @param allocBlendMode ブレンドモードの設定領域を確保するには true を指定します。 132 //! 133 //! @since 2009/09/18 初版。 134 //! 135 void ReserveMem( 136 u8 texMapNum, 137 u8 texSRTNum, 138 u8 texCoordGenNum, 139 u8 tevStageNum = 0, 140 bool allocAlpComp = false, 141 bool allocBlendMode = false); 142 143 //! @brief マテリアルに格納することのできるテクスチャの上限数を取得します。 144 //! 145 //! @return TexMap を格納できる上限数を返します。 146 //! 147 //! @sa ReserveMem 148 //! 149 //! @since 2009/09/18 初版。 150 //! GetTexMapCap()151 u8 GetTexMapCap() const 152 { 153 return u8(m_MemCap.texMap); 154 } 155 156 //! @brief マテリアルに格納することのできるテクスチャ SRT 変換行列の上限数を取得します。 157 //! 158 //! @return テクスチャ SRT 変換行列を格納できる上限数を返します。 159 //! 160 //! @sa ReserveMem 161 //! 162 //! @since 2009/09/18 初版。 163 //! GetTexSRTCap()164 u8 GetTexSRTCap() const 165 { 166 return u8(m_MemCap.texSRT); 167 } 168 169 //! @brief マテリアルに格納することのできるテクスチャ座標生成の上限数を取得します。 170 //! 171 //! @return テクスチャ座標生成を格納できる上限数を返します。 172 //! 173 //! @sa ReserveMem 174 //! 175 //! @since 2009/09/18 初版。 176 //! GetTexCoordGenCap()177 u8 GetTexCoordGenCap() const 178 { 179 return u8(m_MemCap.texCoordGen); 180 } 181 182 //! @brief マテリアルに格納することのできる TEV ステージの上限数を取得します。 183 //! 184 //! @return TEV ステージを格納できる上限数を返します。 185 //! 186 //! @sa ReserveMem 187 //! 188 //! @since 2009/09/18 初版。 189 //! GetTevStageCap()190 u8 GetTevStageCap() const 191 { 192 return u8(m_MemCap.tevStage); 193 } 194 195 //! @brief マテリアルがアルファコンペアの設定を格納することができるかどうかを取得します。 196 //! 197 //! @return アルファコンペアの設定を格納できる場合は true を返します。 198 //! 199 //! @sa ReserveMem 200 //! 201 //! @since 2009/09/18 初版。 202 //! IsAlphaCompareCap()203 bool IsAlphaCompareCap() const 204 { 205 return m_MemCap.alpComp != 0; 206 } 207 208 //! @brief マテリアルがブレンドモード設定を格納することができるかどうかを取得します。 209 //! 210 //! @return ブレンドモード設定を格納できる場合は true を返します。 211 //! 212 //! @sa ReserveMem 213 //! 214 //! @since 2009/09/18 初版。 215 //! IsBlendModeCap()216 bool IsBlendModeCap() const 217 { 218 return m_MemCap.blendMode != 0; 219 } 220 221 //! @brief マテリアルの名前を取得します。 222 //! 223 //! @return マテリアルの名前を返します。 224 //! 225 //! @sa SetName 226 //! 227 //! @since 2009/09/18 初版。 228 //! GetName()229 const char* GetName() const 230 { 231 return m_Name; 232 } 233 234 //! @brief マテリアルの名前を設定します。 235 //! 236 //! @details 237 //! セットできるマテリアル名文字列の最大長は lyt::MaterialNameStrMax です。 238 //! 239 //! @param name 設定する名前です。 240 //! 241 //! @sa GetName 242 //! 243 //! @since 2009/09/18 初版。 244 //! 245 void SetName(const char* name); 246 247 //@} 248 249 //---------------------------------------- 250 //! @name テクスチャ 251 //@{ 252 253 //! @brief テクスチャの数を取得します。 254 //! 255 //! @return テクスチャの数を返します。 256 //! 257 //! @sa SetTexMapNum 258 //! 259 //! @since 2009/09/18 初版。 260 //! GetTexMapNum()261 u8 GetTexMapNum() const 262 { 263 return u8(m_MemNum.texMap); 264 } 265 266 //! @brief テクスチャの数を設定します。 267 //! 268 //! @param num テクスチャの数です。 269 //! 270 //! @sa GetTexMapNum 271 //! 272 //! @since 2009/09/18 初版。 273 //! 274 void SetTexMapNum(u8 num); 275 276 //! @brief テクスチャ座標生成の数を取得します。 277 //! 278 //! @return テクスチャ座標生成の数を返します。 279 //! 280 //! @sa SetTexCoordGenNum 281 //! 282 //! @since 2009/09/18 初版。 283 //! GetTexCoordGenNum()284 u8 GetTexCoordGenNum() const 285 { 286 return u8(m_MemNum.texCoordGen); 287 } 288 289 //! @brief テクスチャ座標生成の数を設定します。 290 //! 291 //! @param num テクスチャ座標生成の数です。 292 //! 293 //! @sa GetTexCoordGenNum 294 //! 295 //! @since 2009/09/18 初版。 296 //! 297 void SetTexCoordGenNum(u8 num); 298 299 //! @brief テクスチャSRTの数を取得します。 300 //! 301 //! @return テクスチャSRTの数を返します。 302 //! 303 //! @sa SetSRTNum 304 //! 305 //! @since 2010/03/26 初版。 306 //! GetTexSRTNum()307 u8 GetTexSRTNum() const 308 { 309 return u8(m_MemNum.texSRT); 310 } 311 312 //! @brief テクスチャSRTの数を設定します。 313 //! 314 //! @param num テクスチャSRTの数です。 315 //! 316 //! @sa GetTexSRTNum 317 //! 318 //! @since 2010/03/26 初版。 319 //! 320 void SetTexSRTNum(u8 num); 321 322 //! @brief テクスチャデータを取得します。 323 //! 324 //! @details 325 //! idx に ReserveMem() または SetTexMapNum() で設定したテクスチャの数よりも 326 //! 大きな値を渡した場合はアサートが発生します。 327 //! 328 //! @param idx インデックスです。 329 //! 330 //! @return オブジェクトへの参照を返します。 331 //! 332 //! @sa SetTexMap 333 //! @sa ReserveMem 334 //! @sa SetTexMapNum 335 //! 336 //! @since 2009/09/18 初版。 337 //! GetTexMap(u32 idx)338 const TexMap& GetTexMap(u32 idx) const 339 { 340 NW_ASSERT(idx < m_MemNum.texMap); 341 return GetTexMapAry()[idx]; 342 } 343 344 //! @brief テクスチャデータを設定します。 345 //! 346 //! @details 347 //! idx に ReserveMem() または SetTexMapNum() で設定したテクスチャ数よりも 348 //! 大きな値を渡した場合はアサートが発生します。 349 //! 350 //! @param idx インデックスです。 351 //! @param value TexMap オブジェクトへの参照です。 352 //! 353 //! @sa GetTexMap 354 //! @sa ReserveMem 355 //! @sa SetTexMapNum 356 //! 357 //! @since 2009/09/18 初版。 358 //! SetTexMap(u32 idx,const TexMap & value)359 void SetTexMap(u32 idx, const TexMap& value) 360 { 361 NW_ASSERT(idx < m_MemNum.texMap); 362 GetTexMapAry()[idx] = value; 363 this->SetTextureDirty(); 364 } 365 366 //! @brief テクスチャデータを設定します。 367 //! 368 //! @details 369 //! idx に ReserveMem() または SetTexMapNum() で設定したテクスチャ数よりも 370 //! 大きな値を渡した場合はアサートが発生します。 371 //! 372 //! @param idx インデックスです。 373 //! @param value TextureInfo オブジェクトへの参照です。 374 //! 375 //! @sa GetTexMap 376 //! @sa ReserveMem 377 //! @sa SetTexMapNum 378 //! 379 //! @since 2010/05/26 初版。 380 //! SetTexMap(u32 idx,const TextureInfo & value)381 void SetTexMap(u32 idx, const TextureInfo& value) 382 { 383 NW_ASSERT(idx < m_MemNum.texMap); 384 GetTexMapAry()[idx].Set(value); 385 this->SetTextureDirty(); 386 } 387 388 //! @brief テクスチャ SRT 行列を取得します。 389 //! 390 //! @details 391 //! idx に ReserveMem() または SetTexSRTNum() で設定したテクスチャ SRT 行列の数よりも 392 //! 大きな値を渡した場合はアサートが発生します。 393 //! 394 //! @param idx インデックスです。 395 //! 396 //! @return オブジェクトへの参照を返します。 397 //! 398 //! @sa SetTexSRT 399 //! @sa ReserveMem 400 //! @sa SetTexSRTNum 401 //! 402 //! @since 2009/09/18 初版。 403 //! GetTexSRT(u32 idx)404 const TexSRT& GetTexSRT(u32 idx) const 405 { 406 NW_ASSERT(idx < m_MemNum.texSRT); 407 return GetTexSRTAry()[idx]; 408 } 409 410 //! @brief テクスチャ SRT 行列を設定します。 411 //! 412 //! @details 413 //! idx に ReserveMem() または SetTexSRTNum() で設定したテクスチャ SRT 行列の数よりも 414 //! 大きな値を渡した場合はアサートが発生します。 415 //! 416 //! @param idx インデックスです。 417 //! @param value 設定するテクスチャ SRT 行列です。 418 //! 419 //! @sa GetTexSRT 420 //! @sa ReserveMem 421 //! @sa SetTexSRTNum 422 //! 423 //! @since 2009/09/18 初版。 424 //! SetTexSRT(u32 idx,const TexSRT & value)425 void SetTexSRT(u32 idx, const TexSRT& value) 426 { 427 NW_ASSERT(idx < m_MemNum.texSRT); 428 GetTexSRTAry()[idx] = value; 429 this->SetTextureDirty(); 430 } 431 432 //! @brief テクスチャ座標生成を取得します。 433 //! 434 //! @details 435 //! idx に ReserveMem() または SetTexCoordGenNum() で設定した 436 //! テクスチャ座標生成の数よりも大きな値を渡した場合は 437 //! アサートが発生します。 438 //! 439 //! @param idx インデックスです。 440 //! 441 //! @return オブジェクトへの参照を返します。 442 //! 443 //! @sa SetTexCoordGen 444 //! @sa ReserveMem 445 //! @sa GetTexCoordGenNum 446 //! @sa SetTexCoordGenNum 447 //! 448 //! @since 2009/09/18 初版。 449 //! GetTexCoordGen(u32 idx)450 const TexCoordGen& GetTexCoordGen(u32 idx) const 451 { 452 NW_ASSERT(idx < m_MemNum.texCoordGen); 453 return GetTexCoordGenAry()[idx]; 454 } 455 456 //! @brief テクスチャ座標生成を設定します。 457 //! 458 //! @details 459 //! idx に ReserveMem() または SetTexCoordGenNum() で設定したテクスチャ座標生成の 460 //! 格納可能数よりも大きな値を渡した場合はアサートが発生します。 461 //! 462 //! @param idx インデックスです。 463 //! @param value 設定するテクスチャ座標生成です。 464 //! 465 //! @sa GetTexCoordGen 466 //! @sa ReserveMem 467 //! 468 //! @since 2009/09/18 初版。 469 //! SetTexCoordGen(u32 idx,const TexCoordGen & value)470 void SetTexCoordGen(u32 idx, const TexCoordGen& value) 471 { 472 NW_ASSERT(idx < m_MemNum.texCoordGen); 473 GetTexCoordGenAry()[idx] = value; 474 this->SetTextureDirty(); 475 } 476 477 //! @brief 成分を指定してテクスチャ SRT のパラメータを取得します。 478 //! 479 //! @details 480 //! テクスチャSRTの表示位置、回転、拡大率の成分を指定して取得します。 481 //! 482 //! eleIdx の指定には lyt::AnimTargetTexSRT の値を使用してください。 483 //! 484 //! @param idx TexSRT のインデックスです。 485 //! @param eleIdx 成分のインデックスです。 486 //! 487 //! @return テクスチャSRTの指定された成分を返します。 488 //! 489 //! @sa AnimTargetTexSRT 490 //! @sa SetTexSRTElement 491 //! 492 //! @since 2009/09/18 初版。 493 //! GetTexSRTElement(u32 idx,u32 eleIdx)494 f32 GetTexSRTElement(u32 idx, u32 eleIdx) const 495 { 496 NW_ASSERT(idx < m_MemNum.texSRT); 497 498 const f32 *const srtAry = &GetTexSRTAry()[idx].translate.x; 499 return srtAry[eleIdx]; 500 } 501 502 //! @brief 成分を指定してテクスチャ SRT のパラメータを設定します。 503 //! 504 //! @details 505 //! テクスチャの表示位置、回転、拡大率の成分を指定して設定します。 506 //! 507 //! eleIdx の指定には lyt::AnimTargetTexSRT を使用してください。 508 //! 509 //! idx に ReserveMem() または SetTexSRTNum() で設定したテクスチャ SRT 行列の 510 //! 格納可能数よりも大きな値を渡した場合はアサートが発生します。 511 //! 512 //! @param idx TexSRT のインデックスです。 513 //! @param eleIdx 成分のインデックスです。 514 //! @param value 成分の値です。 515 //! 516 //! @sa AnimTargetTexSRT 517 //! @sa GetTexSRTElement 518 //! @sa ReserveMem 519 //! @sa SetTexSRTNum 520 //! 521 //! @since 2009/09/18 初版。 522 //! SetTexSRTElement(u32 idx,u32 eleIdx,f32 value)523 void SetTexSRTElement(u32 idx, u32 eleIdx, f32 value) 524 { 525 NW_ASSERT(idx < m_MemNum.texSRT); 526 527 f32 *const srtAry = &GetTexSRTAry()[idx].translate.x; 528 srtAry[eleIdx] = value; 529 this->SetTextureDirty(); 530 } 531 532 //@} 533 534 //---------------------------------------- 535 //! @name TEV 536 //@{ 537 538 //! @brief TEV ステージ数を取得します。 539 //! 540 //! @return TEV ステージ数を返します。 541 //! 542 //! @sa SetTevStageNum 543 //! 544 //! @since 2009/09/18 初版。 545 //! GetTevStageNum()546 u8 GetTevStageNum() const 547 { 548 return u8(m_MemNum.tevStage); 549 } 550 551 //! @brief TEV ステージ数を設定します。 552 //! 553 //! @param num TEV ステージの数です。 554 //! 555 //! @sa GetTevStageNum 556 //! 557 //! @since 2009/09/18 初版。 558 //! 559 void SetTevStageNum(u8 num); 560 561 //! @brief カラーを取得します。 562 //! 563 //! @details 564 //! idx には lyt::TevKonstSel の値を指定します。 565 //! 566 //! @param idx インデックスです。 567 //! 568 //! @return オブジェクトへの参照を返します。 569 //! 570 //! @sa SetColor 571 //! @sa lyt::TevKonstSel 572 //! 573 //! @since 2009/09/18 初版。 574 //! GetColor(u32 idx)575 const ut::Color8& GetColor(u32 idx) const 576 { 577 NW_ASSERT(idx < MatColorMax); 578 return m_Colors[idx]; 579 } 580 581 //! @brief カラーを設定します。 582 //! 583 //! @details 584 //! idx には lyt::TevKonstSel の値を指定します。 585 //! 586 //! @param idx インデックスです。 587 //! @param value カラーの値です。 588 //! 589 //! @sa GetColor 590 //! @sa lyt::TevKonstSel 591 //! 592 //! @since 2009/09/18 初版。 593 //! SetColor(u32 idx,ut::Color8 value)594 void SetColor(u32 idx, ut::Color8 value) 595 { 596 NW_ASSERT(idx < MatColorMax); 597 m_Colors[idx] = value; 598 } 599 600 //! @brief カラーの種類を指定して TEV のカラーの成分を取得します。 601 //! 602 //! @details 603 //! colorType の指定には lyt::AnimTargetMatColor を使用してください。 604 //! 605 //! @param colorType カラーの種類です。 606 //! 607 //! @return カラー成分の値を返します。 608 //! 609 //! @sa SetColorElement 610 //! @sa lyt::AnimTargetMatColor 611 //! 612 //! @since 2009/09/18 初版。 613 //! 614 u8 GetColorElement(u32 colorType) const; 615 616 //! @brief カラーの種類を指定して TEV のカラーの成分を設定します。 617 //! 618 //! @details 619 //! colorType の指定には lyt::AnimTargetMatColor を使用してください。 620 //! 621 //! @param colorType カラーの種類です。 622 //! @param value カラー値です。 623 //! 624 //! @sa GetColorElement 625 //! @sa lyt::AnimTargetMatColor 626 //! 627 //! @since 2009/09/18 初版。 628 //! 629 void SetColorElement(u32 colorType, u8 value); 630 631 //! @brief TEV ステージを取得します。 632 //! 633 //! @details 634 //! idx に ReserveMem() 関数または SetTevStageNum() 関数で設定した 635 //! TEVステージ数よりも大きな値を渡した場合にはアサートが発生します。 636 //! 637 //! @param idx インデックスです。 638 //! 639 //! @return TevStage オブジェクトへの参照を返します。 640 //! 641 //! @sa SetTevStage 642 //! @sa ReserveMem 643 //! @sa GetTevStageNum 644 //! @sa SetTevStageNum 645 //! 646 //! @since 2009/09/18 初版。 647 //! GetTevStage(u32 idx)648 const TevStage& GetTevStage(u32 idx) const 649 { 650 NW_ASSERT(idx < m_MemNum.tevStage); 651 return GetTevStageAry()[idx]; 652 } 653 654 //! @brief TEV ステージを設定します。 655 //! 656 //! @param idx インデックスです。 657 //! @param value TEV ステージ設定です。 658 //! 659 //! @details 660 //! idx に ReserveMem または SetTevStageNum で設定したTEVステージ数よりも 661 //! 大きな値を渡した場合はアサートが発生します。 662 //! 663 //! @sa ReserveMem 664 //! @sa GetTevStage 665 //! 666 //! @since 2009/09/18 初版。 667 //! SetTevStage(u32 idx,const TevStage & value)668 void SetTevStage(u32 idx, const TevStage& value) 669 { 670 NW_ASSERT(idx < m_MemNum.tevStage); 671 GetTevStageAry()[idx] = value; 672 } 673 674 //@} 675 676 //---------------------------------------- 677 //! @name マテリアル 678 //@{ 679 680 //! @brief アルファコンペア設定を取得します。 681 //! 682 //! @return アルファコンペア設定を返します。 683 //! 684 //! @sa SetAlphaCompare 685 //! 686 //! @since 2009/09/18 初版。 687 //! GetAlphaCompare()688 const AlphaCompare& GetAlphaCompare() const 689 { 690 NW_ASSERT(IsAlphaCompareCap()); 691 return *GetAlphaComparePtr(); 692 } 693 694 //! @brief アルファコンペアの設定を行います。 695 //! 696 //! @param value アルファコンペア設定です。 697 //! 698 //! @sa GetAlphaCompare 699 //! 700 //! @since 2009/09/18 初版。 701 //! SetAlphaCompare(AlphaCompare value)702 void SetAlphaCompare(AlphaCompare value) 703 { 704 NW_ASSERT(IsAlphaCompareCap()); 705 *GetAlphaComparePtr() = value; 706 } 707 708 //! @brief ブレンドモード設定を取得します。 709 //! 710 //! @return ブレンドモード設定を返します。 711 //! 712 //! @sa SetBlendMode 713 //! 714 //! @since 2009/09/18 初版。 715 //! GetBlendMode()716 const BlendMode& GetBlendMode() const 717 { 718 NW_ASSERT(IsBlendModeCap()); 719 return *GetBlendModePtr(); 720 } 721 722 //! @brief ブレンドモードの設定を行います。 723 //! 724 //! @param value ブレンドモード設定です。 725 //! 726 //! @sa GetBlendMode 727 //! 728 //! @since 2009/09/18 初版。 729 //! SetBlendMode(BlendMode value)730 void SetBlendMode(BlendMode value) 731 { 732 NW_ASSERT(IsBlendModeCap()); 733 *GetBlendModePtr() = value; 734 } 735 736 //! @brief テクスチャのみ使うかを取得します。 737 //! 738 //! @return テクスチャのみ使う場合は true を返します。 739 //! 740 //! @sa SetTextureOnly 741 //! 742 //! @since 2010/04/23 初版。 743 //! GetTextureOnly()744 bool GetTextureOnly() const 745 { 746 return internal::TestBit(m_Flag, FLAG_TEXTURE_ONLY); 747 } 748 749 //! @brief テクスチャのみ使うか取得します。 750 //! 751 //! @details 752 //! テクスチャ以外の設定は以前のマテリアルの設定をそのまま使います。 753 //! 754 //! @param value テクスチャのみ使う場合は true を指定します。 755 //! 756 //! @sa GetTextureOnly 757 //! 758 //! @since 2010/04/23 初版。 759 //! SetTextureOnly(bool value)760 void SetTextureOnly(bool value) 761 { 762 m_Flag = internal::SetBit(m_Flag, FLAG_TEXTURE_ONLY, value); 763 } 764 765 //@} 766 767 //---------------------------------------- 768 //! @name アニメーション 769 //@{ 770 771 //! @brief アニメーションを関連付けます。 772 //! 773 //! @param pAnimTrans pAnimTrans アニメーションへのポインタです。 774 //! 775 //! @sa UnbindAnimation 776 //! @sa UnbindAllAnimation 777 //! 778 //! @since 2009/09/18 初版。 779 //! 780 virtual void BindAnimation(AnimTransform* pAnimTrans); 781 782 //! @brief アニメーションの関連付けを解除します。 783 //! 784 //! @details 785 //! pAnimTrans に NULL を渡した場合はすべての関連付けが解除されます。 786 //! (UnbindAllAnimation と同義) 787 //! 788 //! @param pAnimTrans アニメーションへのポインタです。 789 //! 790 //! @sa BindAnimation 791 //! @sa UnbindAllAnimation 792 //! 793 //! @since 2009/09/18 初版。 794 //! 795 virtual void UnbindAnimation(AnimTransform* pAnimTrans); 796 797 //! @brief すべてのアニメーションの関連付けを解除します。 798 //! 799 //! @details 800 //! UnbindAnimation の引数に NULL を渡すのと同義です。 801 //! 802 //! @sa BindAnimation 803 //! @sa UnbindAnimation 804 //! 805 //! @since 2009/09/18 初版。 806 //! 807 virtual void UnbindAllAnimation(); 808 809 //! @brief アニメーションの結果を計算します。 810 //! 811 //! @since 2009/09/18 初版。 812 //! 813 virtual void Animate(); 814 815 //! @brief アニメーションリンク情報を追加します。 816 //! 817 //! @param pAnimationLink アニメーションリンク情報へのポインタです。 818 //! 819 //! @since 2009/09/18 初版。 820 //! 821 void AddAnimationLink(AnimationLink* pAnimationLink); 822 823 //! @brief アニメーションリンク情報を検索します。 824 //! 825 //! @details 826 //! pAnimTrans で指定したアニメーションを持つアニメーションリンク情報を検索します。 827 //! 828 //! @param pAnimTrans アニメーションへのポインタです。 829 //! 830 //! @return 見つかった場合はそのアニメーションリンク情報へのポインタを、 831 //! 見つからなかった場合は NULL を返します。 832 //! 833 //! @since 2009/09/18 初版。 834 //! 835 virtual AnimationLink* FindAnimationLink(AnimTransform* pAnimTrans); 836 837 //! @brief アニメーションリンク情報を検索します。 838 //! 839 //! @details 840 //! animRes で指定したアニメーションリソースを使用するアニメーション 841 //! (AnimTransform)を持つアニメーションリンク情報を検索します。 842 //! 843 //! @param animRes アニメーションリソースオブジェクトへの参照です。 844 //! 845 //! @return 見つかった場合はそのアニメーションリンク情報へのポインタを、 846 //! 見つからなかった場合は NULL を返します。 847 //! 848 //! @sa AnimTransform 849 //! 850 //! @since 2009/09/18 初版。 851 //! 852 virtual AnimationLink* FindAnimationLink(const AnimResource& animRes); 853 854 //! @brief アニメーションの有効/無効状態を設定します。 855 //! 856 //! @details 857 //! 指定したアニメーションの有効/無効状態を設定します。 858 //! 859 //! @param pAnimTrans アニメーションへのポインタです。 860 //! @param bEnable 設定する状態です。 861 //! 862 //! @since 2009/09/18 初版。 863 //! 864 virtual void SetAnimationEnable( 865 AnimTransform* pAnimTrans, 866 bool bEnable); 867 868 //! @brief アニメーションの有効/無効状態を設定します。 869 //! 870 //! @details 871 //! 指定されたアニメーションリソースを使用するアニメーション 872 //! (AnimTransform)の有効/無効状態を設定します。 873 //! 874 //! @param animRes アニメーションリソースオブジェクトへの参照です。 875 //! @param bEnable 設定する状態です。 876 //! 877 //! @sa AnimTransform 878 //! 879 //! @since 2009/09/18 初版。 880 //! 881 virtual void SetAnimationEnable( 882 const AnimResource& animRes, 883 bool bEnable); 884 885 //! @brief 関連付けられているアニメーションのリストを取得します。 886 //! 887 //! @return アニメーションリンク情報のリンクリストを返します。 888 //! 889 //! @sa AnimationLink 890 //! 891 //! @since 2009/09/18 初版。 892 //! GetAnimationList()893 const AnimationList& GetAnimationList() const 894 { 895 return m_AnimList; 896 } 897 898 //! @brief 関連付けられているアニメーションのリストを取得します。 899 //! 900 //! @return アニメーションリンク情報のリンクリストを返します。 901 //! 902 //! @sa AnimationLink 903 //! 904 //! @since 2009/09/18 初版。 905 //! GetAnimationList()906 AnimationList& GetAnimationList() 907 { 908 return m_AnimList; 909 } 910 911 //@} 912 913 //---------------------------------------- 914 //! @name その他 915 //@{ 916 917 //! @brief ユーザーがマテリアルを構築したかどうかを判定します。 918 //! 919 //! @return マテリアルをユーザーが構築した場合は true を返します。 920 //! 921 //! @since 2009/09/18 初版。 922 //! IsUserAllocated()923 bool IsUserAllocated() const 924 { 925 return internal::TestBit(m_Flag, FLAG_USER_ALLOCATED); 926 } 927 928 //! @brief ユーザーが構築したマテリアルであることを宣言します。 929 //! 930 //! @details 931 //! ユーザが構築したと宣言されたマテリアルはライブラリによって 932 //! 解放されません。 933 //! 934 //! @since 2010/08/27 初版。 935 //! SetUserAllocated()936 void SetUserAllocated() 937 { 938 internal::SetBit(&m_Flag, FLAG_USER_ALLOCATED, true); 939 } 940 941 //@} 942 943 #ifdef NW_LYT_DMPGL_ENABLED 944 //! :private 945 //! @brief マテリアルの設置をグラフィックスシステムに送信します。 946 //! 947 //! @details 948 //! ペインの描画中に呼び出されます。 949 //! 950 //! @param drawInfo 描画情報です。 951 //! @param alpha マテリアルカラーに対するアルファ値です。 952 //! @param bInitFrameTransform フレーム変換にデフォルト値を設定する場合は true を指定します。 953 //! 954 virtual void SetupGraphics( 955 const DrawInfo& drawInfo, 956 u8 alpha, 957 bool bInitFrameTransform = true); 958 #endif 959 960 //! @details :private IsTextureDirty()961 bool IsTextureDirty() const 962 { 963 return ! internal::TestBit(m_Flag, FLAG_TEXTURE_CLEAN); 964 } 965 966 //! @details :private 967 void SetTextureDirty(bool bDirty = true) 968 { 969 internal::SetBit(&m_Flag, FLAG_TEXTURE_CLEAN, ! bDirty); 970 } 971 972 protected: 973 //! @brief テクスチャ画像設定の配列を取得します。 974 //! 975 //! @return テクスチャ画像設定の配列を返します。 976 //! 977 //! @since 2010/05/26 初版。 978 //! 979 const TexMap* GetTexMapAry() const; 980 981 //! @brief テクスチャ画像設定の配列を取得します。 982 //! 983 //! @return テクスチャ画像設定の配列を返します。 984 //! 985 //! @since 2010/05/26 初版。 986 //! 987 TexMap* GetTexMapAry(); 988 989 //! @brief テクスチャ座標変換設定の配列を取得します。 990 //! 991 //! @return テクスチャ座標変換設定の配列を返します。 992 //! 993 //! @since 2010/05/26 初版。 994 //! 995 const TexSRT* GetTexSRTAry() const; 996 997 //! @brief テクスチャ座標変換設定の配列を取得します。 998 //! 999 //! @return テクスチャ座標変換設定の配列を返します。 1000 //! 1001 //! @since 2010/05/26 初版。 1002 //! 1003 TexSRT* GetTexSRTAry(); 1004 1005 //! @brief テクスチャ座標生成設定の配列を取得します。 1006 //! 1007 //! @return テクスチャ座標生成設定の配列を返します。 1008 //! 1009 //! @since 2010/05/26 初版。 1010 //! 1011 const TexCoordGen* GetTexCoordGenAry() const; 1012 1013 //! @brief テクスチャ座標生成設定の配列を取得します。 1014 //! 1015 //! @return テクスチャ座標生成設定の配列を返します。 1016 //! 1017 //! @since 2010/05/26 初版。 1018 //! 1019 TexCoordGen* GetTexCoordGenAry(); 1020 1021 //! @brief アルファコンペア設定のアドレスを取得します。 1022 //! 1023 //! @return アルファコンペア設定のアドレスを返します。 1024 //! 1025 //! @since 2010/05/26 初版。 1026 //! 1027 const AlphaCompare* GetAlphaComparePtr() const; 1028 1029 //! @brief アルファコンペア設定のアドレスを取得します。 1030 //! 1031 //! @return アルファコンペア設定のアドレスを返します。 1032 //! 1033 //! @since 2010/05/26 初版。 1034 //! 1035 AlphaCompare* GetAlphaComparePtr(); 1036 1037 //! @brief ブレンドモード設定のアドレスを取得します。 1038 //! 1039 //! @return ブレンドモード設定のアドレスを返します。 1040 //! 1041 //! @since 2010/05/26 初版。 1042 //! 1043 const BlendMode* GetBlendModePtr() const; 1044 1045 //! @brief ブレンドモード設定のアドレスを取得します。 1046 //! 1047 //! @return ブレンドモード設定のアドレスを返します。 1048 //! 1049 //! @since 2010/05/26 初版。 1050 //! 1051 BlendMode* GetBlendModePtr(); 1052 1053 //! @brief TEV設定のアドレスを取得します。 1054 //! 1055 //! @return TEV設定のアドレスを返します。 1056 //! 1057 //! @since 2010/05/26 初版。 1058 //! 1059 const TevStage* GetTevStageAry() const; 1060 1061 //! @brief TEV設定の配列を取得します。 1062 //! 1063 //! @return TEV設定の配列を返します。 1064 //! 1065 //! @since 2010/05/26 初版。 1066 //! 1067 TevStage* GetTevStageAry(); 1068 1069 private: 1070 //! @details :private 1071 void Init(); 1072 1073 //! @details :private 1074 void InitMatMemNums(internal::MatMemNums* ptr); 1075 1076 //! @details :private 1077 AnimationList m_AnimList; 1078 1079 //! @details :private 1080 ut::Color8 m_Colors[MatColorMax]; 1081 1082 //! @details :private 1083 internal::MatMemNums m_MemCap; 1084 1085 //! @details :private 1086 internal::MatMemNums m_MemNum; 1087 1088 //! @details :private 1089 void* m_pMem; 1090 1091 //! @details :private 1092 char m_Name[MaterialNameStrMax + 1]; 1093 1094 //! @details :private 1095 u8 m_Flag; 1096 1097 //! @details :private 1098 u8 m_Padding[2]; 1099 1100 private: 1101 // コピーコンストラクタと代入演算子の呼び出しを禁止します。実装してはいけません。 1102 Material(const Material& other); 1103 Material& operator = (const Material& other); 1104 1105 }; 1106 1107 } // namespace nw::lyt 1108 } // namespace nw 1109 1110 #endif // NW_LYT_MATERIAL_H_ 1111