1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gr_RenderState.h 4 5 Copyright (C)2010 Nintendo Co., Ltd. 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 $Rev: 26256 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_GR_RENDER_STATE_H_ 17 #define NN_GR_RENDER_STATE_H_ 18 19 #include <nn/gr/CTR/gr_Prefix.h> 20 21 namespace nn 22 { 23 namespace gr 24 { 25 namespace CTR 26 { 27 28 /*! 29 @brief レンダーステート設定のためのクラスです。 30 */ 31 class RenderState 32 { 33 public : 34 /*! 35 @brief カラーマスク設定のための定義です。 36 */ 37 enum ColorMask 38 { 39 //! 赤成分を表します。 40 COLOR_MASK_R = 1 << 0, 41 //! 緑成分を表します。 42 COLOR_MASK_G = 1 << 1, 43 //! 青成分を表します。 44 COLOR_MASK_B = 1 << 2, 45 //! アルファ成分を表します。 46 COLOR_MASK_A = 1 << 3, 47 //! すべての成分を表します。 48 COLOR_MASK_RGBA = COLOR_MASK_R | COLOR_MASK_G | COLOR_MASK_B | COLOR_MASK_A 49 }; 50 51 /*! 52 @brief アルファテスト設定のためのクラスです。 53 */ 54 /* 55 各値を設定し、 MakeCommand()を呼ぶことで、描画コマンドを生成することができます。 56 */ 57 class AlphaTest 58 { 59 public : 60 /*! 61 @brief アルファテストの有効/無効の設定です。 62 型は bool です。 63 無効化されている場合は、必ずパスします。 64 初期値はfalse(無効)です。 65 */ 66 bool isEnable; 67 68 /*! 69 @brief アルファテストで参照する定数を設定します。 70 型は u8 です。 71 ユニフォーム値[0.f, 1.f]を[0, 255]の8ビットの整数にマップした値を設定します。 72 初期値は0です。 73 */ 74 u8 refValue; 75 76 /*! 77 @brief アルファテストで使用される比較方法を設定します。 78 型は PicaDataAlphaTest です。 79 値には PICA マクロヘッダの列挙型の名前が PicaDataAlphaTest 80 の列挙定数を使って下さい。 81 初期値は、PICA_DATA_ALPHA_TEST_ALWAYSです。 82 */ 83 /* 84 値は、 85 PICA_DATA_ALPHA_TEST_NEVER、 86 PICA_DATA_ALPHA_TEST_ALWAYS、 87 PICA_DATA_ALPHA_TEST_EQUAL、 88 PICA_DATA_ALPHA_TEST_NOTEQUAL、 89 PICA_DATA_ALPHA_TEST_LESS、 90 PICA_DATA_ALPHA_TEST_LEQUAL、 91 PICA_DATA_ALPHA_TEST_GREATER、 92 PICA_DATA_ALPHA_TEST_GEQUAL 93 のいずれかを設定します。 94 */ 95 PicaDataAlphaTest func; 96 97 NN_PADDING1; 98 99 public : 100 101 /*! 102 @brief アルファテスト設定の初期値で初期化します。 103 104 @param[in] renderState_ レンダーステートです。 105 */ 106 explicit AlphaTest( const RenderState& renderState_ ); 107 108 /*! 109 @brief 設定された情報をもとに、描画コマンドを生成します。 110 111 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 112 @param[in] isUpdateFBAccess フレームバッファアクセスを更新します 113 114 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 115 */ 116 u32* MakeCommand( u32* command, bool isUpdateFBAccess = true ) const; 117 118 private: 119 const RenderState& m_RenderState; 120 }; 121 122 /*! 123 @brief ブレンド設定のためのクラスです。 124 */ 125 /* 126 各値を設定し、 MakeCommand()を呼ぶことで、描画コマンドを生成することができます。 127 レジスタを共有しているため、論理演算設定と同時に使用することはできません。 128 */ 129 class Blend 130 { 131 public : 132 /*! 133 @brief ブレンドの有効/無効の設定です。 134 型は bool です。初期値はfalse(無効)です。 135 */ 136 bool isEnable; 137 138 /*! 139 @brief RGB成分のブレンド方程式の設定です。型は PicaDataBlendEquation です。 140 値には PICA マクロヘッダの列挙型の名前が PicaDataBlendEquation 141 の列挙定数を使って下さい。 142 初期値は PICA_DATA_BLEND_EQUATION_ADD です。 143 */ 144 /* 145 値は 146 PICA_DATA_BLEND_EQUATION_ADD、 147 PICA_DATA_BLEND_EQUATION_SUBTRACT、 148 PICA_DATA_BLEND_EQUATION_REVERSE_SUBTRACT、 149 PICA_DATA_BLEND_EQUATION_MIN、 150 PICA_DATA_BLEND_EQUATION_MAX 151 のいずれかを設定します。 152 */ 153 PicaDataBlendEquation eqRgb; 154 155 156 /*! 157 @brief アルファ成分のブレンド関数の設定です。型は PicaDataBlendEquation です。 158 値には PICA マクロヘッダの列挙型の名前が PicaDataBlendEquation 159 の列挙定数を使って下さい。 160 初期値はPICA_DATA_BLEND_EQUATION_ADDです。 161 */ 162 /* 163 値は 164 PICA_DATA_BLEND_EQUATION_ADD、 165 PICA_DATA_BLEND_EQUATION_SUBTRACT、 166 PICA_DATA_BLEND_EQUATION_REVERSE_SUBTRACT、 167 PICA_DATA_BLEND_EQUATION_MIN、 168 PICA_DATA_BLEND_EQUATION_MAX 169 のいずれかを設定します。 170 */ 171 PicaDataBlendEquation eqAlpha; 172 173 /*! 174 @brief ブレンドのRGB成分のソースの設定です。 175 型は PicaDataBlendFunc です。 176 値には PICA マクロヘッダの列挙型の名前が PicaDataBlendFunc 177 の列挙定数を使って下さい。 178 初期値はPICA_DATA_BLEND_FUNC_SRC_ALPHAです。 179 */ 180 /* 181 値は 182 PICA_DATA_BLEND_FUNC_ZERO、 183 PICA_DATA_BLEND_FUNC_ONE、 184 PICA_DATA_BLEND_FUNC_SRC_COLOR、 185 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_COLOR、 186 PICA_DATA_BLEND_FUNC_DST_COLOR、 187 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_COLOR、 188 PICA_DATA_BLEND_FUNC_SRC_ALPHA、 189 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_ALPHA、 190 PICA_DATA_BLEND_FUNC_DST_ALPHA、 191 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_ALPHA、 192 PICA_DATA_BLEND_FUNC_CONSTANT_COLOR、 193 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_COLOR、 194 PICA_DATA_BLEND_FUNC_CONSTANT_ALPHA、 195 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_ALPHA、 196 PICA_DATA_BLEND_FUNC_SRC_ALPHA_SATURATE 197 のいずれかを設定します。 198 */ 199 PicaDataBlendFunc srcRgb; 200 201 /*! 202 @brief ブレンドの Alpha 成分のソースの設定です。 203 型は PicaDataBlendFunc です。 204 値には PICA マクロヘッダの列挙型の名前が PicaDataBlendFunc 205 の列挙定数を使って下さい。 206 初期値は PICA_DATA_BLEND_FUNC_SRC_ALPHA です。 207 */ 208 /* 209 PICA_DATA_BLEND_FUNC_ZERO 210 PICA_DATA_BLEND_FUNC_ONE 211 PICA_DATA_BLEND_FUNC_SRC_COLOR 212 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_COLOR 213 PICA_DATA_BLEND_FUNC_DST_COLOR 214 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_COLOR 215 PICA_DATA_BLEND_FUNC_SRC_ALPHA 216 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_ALPHA 217 PICA_DATA_BLEND_FUNC_DST_ALPHA 218 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_ALPHA 219 PICA_DATA_BLEND_FUNC_CONSTANT_COLOR 220 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_COLOR 221 PICA_DATA_BLEND_FUNC_CONSTANT_ALPHA 222 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_ALPHA 223 PICA_DATA_BLEND_FUNC_SRC_ALPHA_SATURATE 224 のいずれかを設定します。 225 */ 226 PicaDataBlendFunc srcAlpha; 227 228 229 /*! 230 @brief ブレンドのRGB成分のデスティネーションの設定です。 231 型は PicaDataBlendFunc です。 232 値には PICA マクロヘッダの列挙型の名前が PicaDataBlendFunc 233 の列挙定数を使って下さい。 234 初期値は PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_ALPHA です。 235 */ 236 /* 237 値は、 238 PICA_DATA_BLEND_FUNC_ZERO 239 PICA_DATA_BLEND_FUNC_ONE 240 PICA_DATA_BLEND_FUNC_SRC_COLOR 241 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_COLOR 242 PICA_DATA_BLEND_FUNC_DST_COLOR 243 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_COLOR 244 PICA_DATA_BLEND_FUNC_SRC_ALPHA 245 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_ALPHA 246 PICA_DATA_BLEND_FUNC_DST_ALPHA 247 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_ALPHA 248 PICA_DATA_BLEND_FUNC_CONSTANT_COLOR 249 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_COLOR 250 PICA_DATA_BLEND_FUNC_CONSTANT_ALPHA 251 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_ALPHA 252 PICA_DATA_BLEND_FUNC_SRC_ALPHA_SATURATE 253 のいずれかを設定します。 254 */ 255 PicaDataBlendFunc dstRgb; 256 257 /*! 258 @brief ブレンドのALPHA成分のデスティネーションの設定です。 259 型は PicaDataBlendFunc です。 260 値には PICA マクロヘッダの列挙型の名前が PicaDataBlendFunc 261 の列挙定数を使って下さい。 262 初期値は PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_ALPHA です。 263 */ 264 /* 265 値は、 266 PICA_DATA_BLEND_FUNC_ZERO 267 PICA_DATA_BLEND_FUNC_ONE 268 PICA_DATA_BLEND_FUNC_SRC_COLOR 269 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_COLOR 270 PICA_DATA_BLEND_FUNC_DST_COLOR 271 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_COLOR 272 PICA_DATA_BLEND_FUNC_SRC_ALPHA 273 PICA_DATA_BLEND_FUNC_ONE_MINUS_SRC_ALPHA 274 PICA_DATA_BLEND_FUNC_DST_ALPHA 275 PICA_DATA_BLEND_FUNC_ONE_MINUS_DST_ALPHA 276 PICA_DATA_BLEND_FUNC_CONSTANT_COLOR 277 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_COLOR 278 PICA_DATA_BLEND_FUNC_CONSTANT_ALPHA 279 PICA_DATA_BLEND_FUNC_ONE_MINUS_CONSTANT_ALPHA 280 PICA_DATA_BLEND_FUNC_SRC_ALPHA_SATURATE 281 のいずれかを設定します。 282 */ 283 PicaDataBlendFunc dstAlpha; 284 285 286 /*! 287 @brief ブレンドのコンスタントカラーの赤成分の設定です。 288 型は u8 です。 289 [0,255]の範囲で指定します。初期値は255です。 290 */ 291 u8 colorR; 292 293 294 /*! 295 @brief ブレンドのコンスタントカラーの緑成分の設定です。 296 型は u8 です。 297 [0,255]の範囲で指定します。初期値は255です。 298 */ 299 u8 colorG; 300 301 302 /*! 303 @brief ブレンドのコンスタントカラーの青成分の設定です。 304 型は u8 です。 305 [0,255]の範囲で指定します。初期値は255です。 306 */ 307 u8 colorB; 308 309 310 /*! 311 @brief ブレンドのコンスタントカラーのアルファ成分の設定です。 312 型は u8 です。[0,255]の範囲で指定します。初期値は255です。 313 */ 314 u8 colorA; 315 316 NN_PADDING1; 317 318 public : 319 /*! 320 @brief ブレンド設定の初期値で初期化します。 321 322 @param[in] renderState_ レンダーステートです。 323 */ 324 explicit Blend( const RenderState& renderState_ ); 325 326 327 /*! 328 @brief 設定された情報をもとに、描画コマンドを生成します。 329 330 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 331 @param[in] isUpdateFBAccess フレームバッファアクセスを更新します 332 333 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 334 */ 335 u32* MakeCommand( u32* command, bool isUpdateFBAccess = true ) const; 336 337 private: 338 const RenderState& m_RenderState; 339 340 }; 341 342 /*! 343 @brief 論理演算設定のためのクラスです。 344 */ 345 // 各値を設定し、 MakeCommand()を呼ぶことで、描画コマンドを生成することができます。 346 //レジスタを共有しているため、ブレンド設定と同時に使用することはできません。 347 class LogicOp 348 { 349 public : 350 /*! 351 @brief 論理演算の有効/無効の設定です。型は bool です。初期値はfalse(無効)です。 352 */ 353 bool isEnable; 354 355 /*! 356 @brief 論理演算の設定です。 357 型は PicaDataLogicOp です。 358 値には PICA マクロヘッダの列挙型の名前が PicaDataLogicOp 359 の列挙定数を使って下さい。 360 初期値はNOOPです。 361 */ 362 /* 363 値は、 364 PICA_DATA_LOGIC_CLEAR 365 PICA_DATA_LOGIC_AND 366 PICA_DATA_LOGIC_AND_REVERSE 367 PICA_DATA_LOGIC_COPY 368 PICA_DATA_LOGIC_SET 369 PICA_DATA_LOGIC_COPY_INVERTED 370 PICA_DATA_LOGIC_NOOP 371 PICA_DATA_LOGIC_INVERT 372 PICA_DATA_LOGIC_NAND 373 PICA_DATA_LOGIC_OR 374 PICA_DATA_LOGIC_NOR 375 PICA_DATA_LOGIC_XOR 376 PICA_DATA_LOGIC_EQUIV 377 PICA_DATA_LOGIC_AND_INVERTED 378 PICA_DATA_LOGIC_OR_REVERSE 379 PICA_DATA_LOGIC_OR_INVERTED 380 のいずれかを設定します。 381 */ 382 PicaDataLogicOp opCode; 383 384 NN_PADDING2; 385 386 public : 387 /*! 388 @brief 論理演算設定の初期値で初期化します。 389 390 @param[in] renderState_ レンダーステートです。 391 */ 392 explicit LogicOp( const RenderState& renderState_ ); 393 394 395 /*! 396 @brief 設定された情報をもとに、描画コマンドを生成します。 397 398 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 399 @param[in] isUpdateFBAccess フレームバッファアクセスを更新します 400 401 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 402 */ 403 u32* MakeCommand( u32* command, bool isUpdateFBAccess = true ) const; 404 405 private: 406 const RenderState& m_RenderState; 407 }; 408 409 /*! 410 @brief ステンシルテスト設定のためのクラスです。 411 */ 412 class StencilTest 413 { 414 public : 415 /*! 416 @brief ステンシルテストの有効/無効の設定です。無効化されている場合は、必ずパスします。初期値はfalse(無効)です。 417 */ 418 bool isEnable; 419 420 /*! 421 @brief ステンシルバッファへの書き込みの有効/無効の設定です。 422 型は bool です。初期値はfalse(無効)です。 423 424 */ 425 bool isEnableWrite; 426 427 NN_PADDING2; 428 429 /*! 430 @brief ステンシルテストに使用される比較関数の設定です。 431 型は PicaDataStencilTest です。 432 値には PICA マクロヘッダの列挙型の名前が PicaDataStencilTest 433 の列挙定数を使って下さい。 434 初期値は、PICA_DATA_STENCIL_TEST_ALWAYSです。 435 */ 436 /* 437 値は 438 PICA_DATA_STENCIL_TEST_NEVER 439 PICA_DATA_STENCIL_TEST_ALWAYS 440 PICA_DATA_STENCIL_TEST_EQUAL 441 PICA_DATA_STENCIL_TEST_NOTEQUAL 442 PICA_DATA_STENCIL_TEST_LESS 443 PICA_DATA_STENCIL_TEST_LEQUAL 444 PICA_DATA_STENCIL_TEST_GREATER 445 PICA_DATA_STENCIL_TEST_GEQUAL 446 のいずれかを設定します。 447 */ 448 PicaDataStencilTest func; 449 NN_PADDING3; 450 451 452 /*! 453 @brief ステンシルテストに使用される参照値の設定です。 454 型は u32 です。初期値は、0です。 455 */ 456 u32 ref; 457 458 459 /*! 460 @brief ステンシルテストに使用されるマスク値の設定です。 461 型は u32 です。初期値は、0xffです。 462 */ 463 /* 464 ステンシルバッファの値をstencilとすると、 465 ( stencil & mask )と( ref & mask )との間で比較がおこなわれます。 466 */ 467 u32 mask; 468 469 470 /*! 471 @brief ステンシルテストがフェイルした場合に適用する、 472 ステンシルバッファの値の操作を設定します。 473 型は PicaDataStencilOp です。 474 値には PICA マクロヘッダの列挙型の名前が PicaDataStencilOp 475 の列挙定数を使って下さい。 476 初期値は、PICA_DATA_STENCIL_OP_KEEPです。 477 */ 478 /* 479 値は、 480 PICA_DATA_STENCIL_OP_KEEP 481 PICA_DATA_STENCIL_OP_ZERO 482 PICA_DATA_STENCIL_OP_REPLACE 483 PICA_DATA_STENCIL_OP_INCR 484 PICA_DATA_STENCIL_OP_DECR 485 PICA_DATA_STENCIL_OP_INVERT 486 PICA_DATA_STENCIL_OP_INCR_WRAP 487 PICA_DATA_STENCIL_OP_DECR_WRAP 488 のいずれかを設定します。 489 */ 490 PicaDataStencilOp opFail; 491 492 493 /*! 494 @brief ステンシルテストにパスし、 495 デプステストにフェイルした場合に適用する、 496 ステンシルバッファの値の操作を設定します。 497 型は PicaDataStencilOp です。 498 値には PICA マクロヘッダの列挙型の名前が PicaDataStencilOp 499 の列挙定数を使って下さい。 500 初期値は、PICA_DATA_STENCIL_OP_KEEPです。 501 */ 502 /* 503 値は、 504 PICA_DATA_STENCIL_OP_KEEP 505 PICA_DATA_STENCIL_OP_ZERO 506 PICA_DATA_STENCIL_OP_REPLACE 507 PICA_DATA_STENCIL_OP_INCR 508 PICA_DATA_STENCIL_OP_DECR 509 PICA_DATA_STENCIL_OP_INVERT 510 PICA_DATA_STENCIL_OP_INCR_WRAP 511 PICA_DATA_STENCIL_OP_DECR_WRAP 512 のいずれかを設定します。 513 */ 514 PicaDataStencilOp opZFail; 515 516 517 /*! 518 @brief ステンシルテストとデプステストの両方にパスした場合に適用する、 519 ステンシルバッファの値の操作を設定します。 520 型は PicaDataStencilOp です。 521 値には PICA マクロヘッダの列挙型の名前が PicaDataStencilOp 522 の列挙定数を使って下さい。 523 初期値は、PICA_DATA_STENCIL_OP_KEEPです。 524 */ 525 /* 526 値は、 527 PICA_DATA_STENCIL_OP_KEEP 528 PICA_DATA_STENCIL_OP_ZERO 529 PICA_DATA_STENCIL_OP_REPLACE 530 PICA_DATA_STENCIL_OP_INCR 531 PICA_DATA_STENCIL_OP_DECR 532 PICA_DATA_STENCIL_OP_INVERT 533 PICA_DATA_STENCIL_OP_INCR_WRAP 534 PICA_DATA_STENCIL_OP_DECR_WRAP 535 のいずれかを設定します。 536 */ 537 PicaDataStencilOp opZPass; 538 539 NN_PADDING1; 540 541 public : 542 /*! 543 @brief ステンシルテスト設定の初期値で初期化します。 544 545 @param[in] renderState_ レンダーステートです。 546 */ 547 explicit StencilTest( const RenderState& renderState_ ); 548 549 /*! 550 @brief 設定された情報をもとに、描画コマンドを生成します。 551 552 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 553 @param[in] isUpdateFBAccess フレームバッファアクセスを更新します 554 555 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 556 */ 557 u32* MakeCommand( u32* command, bool isUpdateFBAccess = true ) const; 558 559 private: 560 const RenderState& m_RenderState; 561 }; 562 563 /*! 564 @brief デプステスト設定のためのクラスです。 565 */ 566 class DepthTest 567 { 568 public : 569 570 /*! 571 @brief デプステストの有効/無効の設定です。 572 型は bool です。 573 無効化されている場合は、必ずパスします。 574 初期値はtrue(有効)です。 575 */ 576 bool isEnable; 577 578 579 /*! 580 @brief デプスバッファへの書き込みの有効/無効の設定です。 581 型は bool です。 582 初期値はtrue(有効)です。 583 */ 584 bool isEnableWrite; 585 586 /*! 587 @brief デプステストに使用される比較関数の設定です。 588 型は PicaDataDepthTest です。 589 値には PICA マクロヘッダの列挙型の名前が PicaDataDepthTest 590 の列挙定数を使って下さい。 591 初期値は PICA_DATA_DEPTH_TEST_LESS です。 592 */ 593 /* 594 値は、 595 PICA_DATA_DEPTH_TEST_NEVER 596 PICA_DATA_DEPTH_TEST_ALWAYS 597 PICA_DATA_DEPTH_TEST_EQUAL 598 PICA_DATA_DEPTH_TEST_NOTEQUAL 599 PICA_DATA_DEPTH_TEST_LESS 600 PICA_DATA_DEPTH_TEST_LEQUAL 601 PICA_DATA_DEPTH_TEST_GREATER 602 PICA_DATA_DEPTH_TEST_GEQUAL 603 のいずれかを設定します。 604 */ 605 PicaDataDepthTest func; 606 607 NN_PADDING1; 608 609 public : 610 /*! 611 @brief デプステスト設定の初期値で初期化します。 612 613 @param[in] renderState_ レンダーステートです。 614 */ 615 explicit DepthTest( const RenderState& renderState_ ); 616 617 618 /*! 619 @brief 設定された情報をもとに、描画コマンドを生成します。 620 生成される描画コマンドの中には、カラーマスクの設定も含まれますので、 621 注意してください。 622 623 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。型は u32* です。 624 @param[in] isUpdateFBAccess フレームバッファアクセスを更新します。型は bool です。 625 626 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 627 */ 628 u32* MakeCommand( u32* command, bool isUpdateFBAccess = true ) const; 629 630 private: 631 const RenderState& m_RenderState; 632 }; 633 634 /*! 635 @brief wバッファ設定のためのクラスです。 636 */ 637 class WBuffer 638 { 639 public : 640 641 /*! 642 @brief wバッファ有効時のスケール値です。型は f32 です。 643 wScaleが0のとき、wバッファは無効になります。初期値は0です。 644 */ 645 f32 wScale; 646 647 /*! 648 @brief ポリゴンオフセットの有効/無効の設定です。型は bool です。 649 wバッファと同時に使用することはできません。 650 m_WScaleが0以外のとき、ポリゴンオフセットは設定に依らず無効になります。 651 */ 652 bool isEnablePolygonOffset; 653 654 NN_PADDING3; 655 656 /*! 657 @brief デプス値の分解可能最小値に対するスケール値の設定です。 658 型は f32 です。 659 デプス値の分解可能最小値は、デプスバッファのビット値に依存します。 660 初期値は0です。 661 wバッファを有効にしている場合は、ポリゴンオフセットは無効になります。 662 663 @see depthRangeBit; 664 */ 665 666 f32 polygonOffsetUnit; 667 668 /*! 669 @brief クリップ空間におけるNear平面のdepth値の設定です。 670 型は f32 です。 671 初期値は0です。 672 0 <= depthRangeNear <= depthRangeFar <= 1となるように設定します。 673 wバッファを有効にしている場合は設定を無視して0が設定されます。 674 */ 675 f32 depthRangeNear; 676 677 /*! 678 @brief クリップ空間におけるFar平面のdepth値の設定です。 679 型は f32 です。 680 初期値は1です。 681 0 <= depthRangeNear <= depthRangeFar <= 1となるように設定します。 682 wバッファを有効にしている場合は設定を無視して1が設定されます。 683 */ 684 f32 depthRangeFar; 685 686 /*! 687 @brief デブスバッファのビット値を指定します。 688 型は f32 です。 689 初期値は24です。 690 */ 691 u8 depthRangeBit; 692 693 NN_PADDING3; 694 695 public : 696 /*! 697 @brief wバッファ設定の初期値で初期化します。 698 699 @param[in] renderState_ レンダーステートです。 700 */ 701 explicit WBuffer( const RenderState& renderState_ ); 702 703 /*! 704 @brief 設定された情報をもとに、描画コマンドを生成します。 705 706 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 707 @param[in] isUpdateFBAccess フレームバッファアクセスを更新します。 708 709 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 710 */ 711 u32* MakeCommand( u32* command, bool isUpdateFBAccess = true ) const; 712 713 private: 714 const RenderState& m_RenderState; 715 }; 716 717 /*! 718 @brief カリング設定のためのクラスです。 719 */ 720 class Culling 721 { 722 public : 723 /*! 724 @brief カリングの有効/無効の設定です。 725 型は bool です。 726 無効化されている場合は、両面ポリゴンが描画されます。 727 初期値はtrue(有効)です。 728 */ 729 bool isEnable; 730 731 /*! 732 @brief ポリゴン面の表の向きをあらわします。 733 */ 734 enum FrontFace 735 { 736 /*! 737 @brief 頂点が時計回りに配置されている場合を表とします。 738 */ 739 FRONT_FACE_CW , 740 741 /*! 742 @brief 頂点が反時計回りに配置されている場合を表とします。 743 */ 744 FRONT_FACE_CCW 745 }; 746 747 /*! 748 @brief ポリゴン面の表の向きを設定します。 749 型は nn:gr::CTR::RenderState::Culling::FrontFace です。 750 初期値は FRONT_FACE_CCW(反時計回り)です。 751 */ 752 FrontFace frontFace; 753 754 /*! 755 @brief カリングするポリゴン面をあらわします。 756 */ 757 enum CullFace 758 { 759 /*! 760 @brief 表面をカリングします。 761 */ 762 CULL_FACE_FRONT, 763 /*! 764 @brief 裏面をカリングします。 765 */ 766 CULL_FACE_BACK 767 }; 768 769 /*! 770 @brief カリングするポリゴン面を設定します。 771 型は nn:gr::CTR::RenderState::Culling::CullFace です。 772 初期値は CULL_FACE_BACK です。 773 */ 774 CullFace cullFace; 775 776 NN_PADDING1; 777 778 public : 779 /*! 780 @brief カリング設定の初期値で初期化します。 781 782 @param[in] renderState_ レンダーステートです。 783 */ 784 explicit Culling( const RenderState& renderState_ ); 785 786 787 /*! 788 @brief 設定された情報をもとに、描画コマンドを生成します。 789 790 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 791 @param[in] isUpdateFBAccess フレームバッファアクセスを更新します 792 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 793 */ 794 u32* MakeCommand( u32* command, bool isUpdateFBAccess = true ) const; 795 796 private: 797 const RenderState& m_RenderState; 798 }; 799 800 /*! 801 @brief フレームバッファアクセスの設定のためのクラスです。 802 */ 803 /* 804 フレームバッファアクセスの設定は、カラーマスク、ブレンド、論理演算、デプステスト、ステンシルテストの設定 805 に依存するので、コンストラクタで参照を指定します。 806 上記の設定を変えるコマンドを生成した後で、 807 フレームバッファアクセスに変更が生じる場合は、 808 FBAccess::MakeCommand()によりコマンドを生成する必要があります。 809 */ 810 class FBAccess 811 { 812 public : 813 /*! 814 @brief フレームバッファアクセスの設定は、カラーマスク、ブレンド、論理演算、デプステスト、ステンシルテストの設定 815 に依存するので、コンストラクタで参照を指定します。 816 817 @param[in] renderState_ レンダーステートです。 818 */ 819 explicit FBAccess( const RenderState& renderState_ ); 820 821 /*! 822 @brief 各種の設定された情報をもとに、描画コマンドを生成します。 823 824 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 825 826 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 827 */ 828 u32* MakeCommand( u32* command ) const; 829 830 private: 831 const RenderState& m_RenderState; 832 }; 833 834 public : 835 /*! 836 @brief ブレンド設定です。 837 型は nn::gr::CTR::RenderState::Blend です。 838 */ 839 Blend blend; 840 841 /*! 842 @brief 論理演算設定です。 843 型は nn::gr::CTR::RenderState::LogicOp です。 844 */ 845 LogicOp logicOp; 846 847 /*! 848 @brief アルファテスト設定です。 849 型は nn::gr::CTR::RenderState::AlphaTest です。 850 */ 851 AlphaTest alphaTest; 852 853 /*! 854 @brief ステンシルテスト設定です。 855 型は nn::gr::CTR::RenderState::StencilTest です。 856 */ 857 StencilTest stencilTest; 858 859 /*! 860 @brief カラーマスク設定です。 861 型は nn::gr::CTR::RenderState::ColorMask です。 862 */ 863 ColorMask colorMask; 864 NN_PADDING3; 865 866 /*! 867 @brief デプステスト設定です。 868 型は nn::gr::CTR::RenderState::DepthTest です。 869 870 @ref RenderState::DepthTest 871 */ 872 DepthTest depthTest; 873 874 /*! 875 @brief カリング設定です。 876 型は nn::gr::CTR::RenderState::Culling です。 877 878 @ref RenderState::Culling 879 */ 880 Culling cullingTest; 881 882 /*! 883 @brief wバッファ設定です。 884 型は nn::gr::CTR::RenderState::WBuffer です。 885 886 @ref RenderState::WBuffer 887 */ 888 WBuffer wBuffer; 889 890 /*! 891 @brief フレームバッファアクセス設定です。 892 型は nn::gr::CTR::RenderState::FBAccess です。 893 894 */ 895 FBAccess fbAccess; 896 897 public : 898 /*! 899 @brief レンダーステートの各々の設定を、初期値で初期化します。 900 901 @see RenderState::Culling、 902 RenderState::Blend、 903 RenderState::LogicOp、 904 RenderState::AlphaTest、 905 RenderState::StencilTest、 906 RenderState::DepthTest、 907 RenderState::WBuffer、 908 RenderState::FBAccess 909 */ 910 explicit RenderState(); 911 912 /*! 913 @brief 設定された情報をもとに、すべてのレンダーステートの設定コマンドを生成します。 914 915 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 916 917 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 918 919 @see RenderState::Culling::MakeCommand()、 920 RenderState::Blend::MakeCommand()、 921 RenderState::LogicOp::MakeCommand()、 922 RenderState::AlphaTest::MakeCommand()、 923 RenderState::StencilTest::MakeCommand()、 924 RenderState::DepthTest::MakeCommand()、 925 RenderState::WBuffer::MakeCommand()、 926 RenderState::FBAccess::MakeCommand() 927 */ 928 u32* MakeCommand( u32* command ) const; 929 }; 930 931 } // namespace CTR 932 } // namespace gr 933 } // namespace nn 934 935 #endif // NN_GR_RENDER_STATE_H_ 936