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