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