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