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