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