1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     gr_FragmentLight.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: 33735 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_GR_FRAGMENT_LIGHT_H_
17 #define NN_GR_FRAGMENT_LIGHT_H_
18 
19 #include <nn/gr/CTR/gr_Prefix.h>
20 #include <nn/gr/CTR/gr_LookUpTable.h>
21 
22 namespace nn
23 {
24     namespace gr
25     {
26         namespace CTR
27         {
28 
29             /*!
30                 @brief フラグメントライティング設定のためのクラスです。
31              */
32             class FragmentLight
33             {
34             public :
35                 /*!
36                     @brief 光源ごとの設定のためのクラスです。
37                  */
38                 class Source
39                 {
40                 public :
41 
42                     /*!
43                         @brief 光源番号です。
44                                型は u8 です。
45                                0-7までの値を設定します。
46                     */
47                     u8 id;
48 
49                     /*!
50                         @brief trueにすることで、両面にライトを当てることが出来ます。
51                                型は bool です。
52                     */
53                     bool isEnableTwoSideDiffuse;
54 
55                     /*!
56                         @brief ジオメトリック・ファクタ0を使用するかどうかの設定です。
57                                型は bool です。
58                     */
59                     bool isEnableGeomFactor0;
60 
61                     /*!
62                         @brief ジオメトリック・ファクタ1を使用するかどうかの設定です。
63                                型は bool です。
64                     */
65                     bool isEnableGeomFactor1;
66 
67                     /*!
68                         @brief 拡散光の赤成分の設定です。
69                             型は u8 です。
70                                dmp_FragmentMaterial.diffuse×dmp_FragmentLightSource[i].diffuseの値[0.f, 1.f]を[0, 255]にマップして設定します。
71                     */
72                     u8 diffuseR;
73 
74                     /*!
75                         @brief 拡散光の緑成分の設定です。
76                                型は u8 です。
77                                dmp_FragmentMaterial.diffuse×dmp_FragmentLightSource[i].diffuseの値[0.f, 1.f]を
78                                [0, 255]にマップして設定します。
79                     */
80                     u8 diffuseG;
81 
82                     /*!
83                         @brief 拡散光の青成分の設定です。
84                             型は u8 です。
85                                dmp_FragmentMaterial.diffuse×dmp_FragmentLightSource[i].diffuseの値[0.f, 1.f]を
86                                [0, 255]にマップして設定します。
87                     */
88                     u8 diffuseB;
89 
90                     /*!
91                         @brief 環境光の赤成分の設定です。
92                                型は u8 です。
93                                dmp_FragmentMaterial.ambient×dmp_FragmentLightSource[i].ambientの値[0.f, 1.f]を
94                                [0, 255]にマップして設定します。
95                     */
96                     u8 ambientR;
97 
98                     /*!
99                         @brief 環境光の緑成分の設定です。
100                                型は u8 です。
101                                dmp_FragmentMaterial.ambient×dmp_FragmentLightSource[i].ambientの値[0.f, 1.f]を[0, 255]にマップして設定します。
102                     */
103                     u8 ambientG;
104 
105                     /*!
106                         @brief 環境光の青成分の設定です。
107                                型は u8 です。
108                                dmp_FragmentMaterial.ambient×dmp_FragmentLightSource[i].ambientの値[0.f, 1.f]を[0, 255]にマップして設定します。
109                     */
110                     u8 ambientB;
111 
112                     /*!
113                         @brief 鏡面光0の赤成分の設定です。
114                                型は u8 です。
115                                dmp_FragmentMaterial.specular0×dmp_FragmentLightSource[i].specular0の値[0.f, 1.f]を[0, 255]にマップして設定します。
116                     */
117                     u8 specular0R;
118 
119                     /*!
120                         @brief 鏡面光0の緑成分の設定です。
121                                型は u8 です。
122                                dmp_FragmentMaterial.specular0×dmp_FragmentLightSource[i].specular0の値[0.f, 1.f]を[0, 255]にマップして設定します。
123                     */
124                     u8 specular0G;
125 
126                     /*!
127                         @brief 鏡面光0の青成分の設定です。
128                                型は u8 です。
129                                dmp_FragmentMaterial.specular0×dmp_FragmentLightSource[i].specular0の値[0.f, 1.f]を[0, 255]にマップして設定します。
130                     */
131                     u8 specular0B;
132 
133                     /*!
134                         @brief 鏡面光1の赤成分の設定です。
135                                型は u8 です。
136                                Light::isEnableLutRefl に true を設定する場合はdmp_FragmentLightSource[i].specular1の値[0.f, 1.f]を、
137                                false の場合は dmp_FragmentMaterial.specular1×dmp_FragmentLightSource[i].specular1の値[0.f, 1.f]を[0, 255]にマップして設定します。
138                     */
139                     u8 specular1R;
140 
141                     /*!
142                         @brief 鏡面光1の緑成分の設定です。
143                                型は u8 です。
144                                Light::isEnableLutRefl に true を設定する場合はdmp_FragmentLightSource[i].specular1の値[0.f, 1.f]を、
145                                false の場合はdmp_FragmentMaterial.specular1×dmp_FragmentLightSource[i].specular1の値[0.f, 1.f]を[0, 255]にマップして設定します。
146                     */
147                     u8 specular1G;
148 
149                     /*!
150                         @brief 鏡面光1の青成分の設定です。
151                                型は u8 です。
152                                Light::isEnableLutRefl に true を設定する場合はdmp_FragmentLightSource[i].specular1の値[0.f, 1.f]を、
153                                false の場合はdmp_FragmentMaterial.specular1×dmp_FragmentLightSource[i].specular1の値[0.f, 1.f]を[0, 255]にマップして設定します。
154                     */
155                     u8 specular1B;
156 
157                 protected :
158                     /*!
159                         @brief ライト位置のX,Yを描画コマンド形式に変換して保持します。
160                                型は bit32 です。
161                     */
162                     bit32  posXY;
163 
164                     /*!
165                          @brief ライト位置のZを描画コマンド形式に変換して保持します。
166                                 型は bit32 です。
167                      */
168                     bit32  posZ;
169 
170                     /*!
171                          @brief ライト位置を無限遠に飛ばすかどうかのフラグです。
172                                 型は u8 です。
173                      */
174                     u8   isInfinity;
175                     NN_PADDING3;
176 
177                     /*!
178                          @brief 距離減衰のバイアスを描画コマンド形式に変換して保持します。
179                                 型は bit32 です。
180                      */
181                     bit32 distAttnBias;
182 
183                     /*!
184                          @brief 距離減衰のスケールを描画コマンド形式に変換して保持します。
185                                 型は bit32 です。
186                      */
187                     bit32 distAttnScale;
188 
189                     /*!
190                          @brief スポットライト向きのX,Yを描画コマンド形式に変換して保持します。
191                                 型は bit32 です。
192                      */
193                     bit32 spotDirectionXY;
194 
195                     /*!
196                          @brief スポットライト向きのZを描画コマンド形式に変換して保持します。
197                                 型は bit32 です。
198                      */
199                     bit32 spotDirectionZ;
200 
201 
202                 public :
203 
204                     /*!
205                         @brief ライトの位置を設定します。設定された値は、描画コマンドに設定するために16ビット浮動小数に変換して保持します。
206 
207                         @param[in] position    設定するライトの位置です。
208                         @param[in] is_infinity 位置を無限遠に飛ばす場合はtrueを設定します。
209                      */
SetPosition(const nn::math::VEC3 & position,const bool is_infinity)210                     void SetPosition( const nn::math::VEC3& position, const bool is_infinity )
211                     {
212                         posXY = PICA_CMD_DATA_FRAG_LIGHT_POSITION_XY( Float32ToFloat16( position.x ),
213                                                                       Float32ToFloat16( position.y ) );
214                         posZ  = PICA_CMD_DATA_FRAG_LIGHT_POSITION_Z(  Float32ToFloat16( position.z ) );
215                         isInfinity = is_infinity ? 1 : 0;
216                     }
217 
218                     /*!
219                         @brief ライトの位置を設定します。設定された値は、描画コマンドに設定するために16ビット浮動小数に変換して保持します。
220 
221                         @param[in] position_x  設定するライトの x 座標です。
222                         @param[in] position_y  設定するライトの y 座標です。
223                         @param[in] position_z  設定するライトの z 座標です。
224                         @param[in] is_infinity 位置を無限遠に飛ばす場合はtrueを設定します。
225                      */
SetPosition(const f32 position_x,const f32 position_y,const f32 position_z,const bool is_infinity)226                     void SetPosition( const f32 position_x, const f32 position_y, const f32 position_z, const bool is_infinity )
227                     {
228                         posXY = PICA_CMD_DATA_FRAG_LIGHT_POSITION_XY( Float32ToFloat16( position_x ),
229                                                                       Float32ToFloat16( position_y ) );
230                         posZ  = PICA_CMD_DATA_FRAG_LIGHT_POSITION_Z(  Float32ToFloat16( position_z ) );
231                         isInfinity = is_infinity ? 1 : 0;
232                     }
233 
234 
235                     /*!
236                         @brief スポットライトの向きを設定します。設定された値は、描画コマンドに設定するために13ビット固定小数に変換して保持します。
237 
238                         @param[in] spot_direction  設定するスポットライトの向きです。
239                      */
SetSpotDirection(const nn::math::VEC3 & spot_direction)240                     void SetSpotDirection( const nn::math::VEC3& spot_direction )
241                     {
242                         spotDirectionXY = PICA_CMD_DATA_FRAG_LIGHT_SPOT_XY( Float32ToFix13Fraction11( -spot_direction.x ),
243                                                                             Float32ToFix13Fraction11( -spot_direction.y ) );
244                         spotDirectionZ  = PICA_CMD_DATA_FRAG_LIGHT_SPOT_Z(  Float32ToFix13Fraction11( -spot_direction.z ) );
245                     }
246 
247 
248                     /*!
249                         @brief スポットライトの向きを設定します。設定された値は、描画コマンドに設定するために13ビット固定小数に変換して保持します。
250 
251                         @param[in] spot_direction_x  設定するスポットライト向きの x です。
252                         @param[in] spot_direction_y  設定するスポットライト向きの y です。
253                         @param[in] spot_direction_z  設定するスポットライト向きの z です。
254                      */
SetSpotDirection(const f32 & spot_direction_x,const f32 & spot_direction_y,const f32 & spot_direction_z)255                     void SetSpotDirection( const f32& spot_direction_x, const f32& spot_direction_y, const f32& spot_direction_z )
256                     {
257                         spotDirectionXY = PICA_CMD_DATA_FRAG_LIGHT_SPOT_XY( Float32ToFix13Fraction11( - spot_direction_x ),
258                                                                             Float32ToFix13Fraction11( - spot_direction_y ) );
259                         spotDirectionZ  = PICA_CMD_DATA_FRAG_LIGHT_SPOT_Z(  Float32ToFix13Fraction11( - spot_direction_z ) );
260                     }
261 
262 
263                     /*!
264                         @brief 距離減衰のスケール、バイアスを設定します。 設定された値は、描画コマンドに設定するために20ビット浮動小数に変換して保持します。
265 
266                         @param[in] scale 距離減衰のスケールです。
267                         @param[in] bias 距離減衰のバイアスです。
268                      */
SetDistAttnScaleBias(const f32 scale,const f32 bias)269                     void SetDistAttnScaleBias( const f32 scale, const f32 bias )
270                     {
271                         distAttnScale = Float32ToFloat20( scale );
272                         distAttnBias  = Float32ToFloat20( bias );
273                     };
274 
275                     /*!
276                         @brief 距離減衰のスケール、バイアスを、減衰開始距離、減衰終了距離を指定して設定します。設定された値は、スケール・バイアスに変換後、描画コマンドに設定するために20ビット浮動小数に変換して保持します。
277 
278                         @param[in] start 距離減衰の開始距離です。
279                         @param[in] end   距離減衰の終了距離です。
280                      */
SetDistAttnStartEnd(const f32 start,const f32 end)281                     void SetDistAttnStartEnd( const f32 start, const f32 end )
282                     {
283                         f32 r = 1.f / ( end - start );
284                         SetDistAttnScaleBias( r, -start * r );
285                     };
286 
287                 public :
288                     /*!
289                         @brief 設定された情報をもとに、光源についてのコマンドを全て生成します。
290 
291                         @param[in] command  描画コマンドの書き込み先の先頭アドレスです。
292                         @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
293                      */
294                     bit32* MakeAllCommand( bit32* command ) const;
295 
296                     /*!
297                         @brief 設定された情報をもとに、光源についてのコマンドを全て生成します。
298                                内部では MakeAllCommand() を呼んでいます。互換性を保つために残してあります。
299 
300                         @param[in] command  描画コマンドの書き込み先の先頭アドレスです。
301                         @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
302                      */
303                     bit32* MakeCommand( bit32* command ) const;
304 
305                     /*!
306                         @brief 設定された情報をもとに、光源のカラー情報のコマンドを生成します。
307 
308                         @param[in] command  描画コマンドの書き込み先の先頭アドレスです。
309                         @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
310                      */
311                     bit32* MakeColorCommand( bit32* command ) const;
312 
313                     /*!
314                         @brief 設定された情報をもとに、光源の幾何情報のコマンドを生成します。
315 
316                         @param[in] command  描画コマンドの書き込み先の先頭アドレスです。
317                         @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
318                      */
319                     bit32* MakeGeometryCommand( bit32* command ) const;
320 
321                 public :
322                     /*!
323                         @brief コンストラクタでメンバ変数を初期化します。
324                     */
325                     explicit Source();
326                 };
327 
328             public :
329                 //! 光源の最大数は8です。
330                 static const u32 LIGHT_SOURCE_MAX = 8;
331 
332                 /*!
333                     @brief グローバルアンビエントの赤成分の設定です。
334                            型は u8 です。
335                            [0.f, 1.f]を[0, 255]にマップして設定します。
336                 */
337                 // dmp_FragmentMaterial.emission+dmp_FragmentMaterial.ambient×dmp_FragmentLighting.ambientの値[0.f, 1.f]を
338                 // [0, 255]にマップして設定します。
339                 u8 globalAmbientR;
340 
341 
342                 /*!
343                     @brief グローバルアンビエントの緑成分の設定です。
344                            型は u8 です。
345                            [0.f, 1.f]を[0, 255]にマップして設定します。
346                  */
347                  // dmp_FragmentMaterial.emission+dmp_FragmentMaterial.ambient×dmp_FragmentLighting.ambientの値[0.f, 1.f]を
348                  // [0, 255]にマップして設定します。
349                 u8 globalAmbientG;
350 
351 
352                 /*!
353                     @brief グローバルアンビエントの青成分の設定です。
354                            型は u8 です。
355                            [0.f, 1.f]を[0, 255]にマップして設定します。
356                  */
357                  // dmp_FragmentMaterial.emission+dmp_FragmentMaterial.ambient×dmp_FragmentLighting.ambientの値[0.f, 1.f]を
358                  // [0, 255]にマップして設定します。
359                 u8 globalAmbientB;
360                 NN_PADDING1;
361 
362 
363                 /*!
364                     @brief 光源の設定を保持します。
365                            型は nn::gr::CTR::FragmentLight::Source[] です。
366                 */
367                 Source source[ LIGHT_SOURCE_MAX ];
368 
369                 /*!
370                     @brief 光源の有効無効を設定します。
371                            型は, bool[] です。
372                            配列の上限値は, LIGHT_SOURCE_MAX です。
373                 */
374                 bool isEnable[ LIGHT_SOURCE_MAX ];
375 
376                 /*!
377                     @brief スポットライトが有効かどうかの設定です。
378                            型は, bool[] です。
379                            配列の上限値は, LIGHT_SOURCE_MAX です。
380                 */
381                 bool isEnableSpot[ LIGHT_SOURCE_MAX ];
382 
383                 /*!
384                     @brief 距離減衰の有効無効の設定です。
385                            型は, bool[] です。
386                            配列の上限値は, LIGHT_SOURCE_MAX です。
387                 */
388                 bool isEnableDistAttn[ LIGHT_SOURCE_MAX ];
389 
390                 /*!
391                     @brief シャドウ調整要素の設定です。
392                            型は, bool[] です。
393                            配列の上限値は, LIGHT_SOURCE_MAX です。
394                 */
395                 bool isShadowed[ LIGHT_SOURCE_MAX ];
396 
397                 /*!
398                     @brief レイヤーコンフィグの設定です。
399                            型は @ref PicaDataFragLightEnvLayerConfig です。
400                 */
401                 /*
402                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG0
403                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG1
404                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG2
405                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG3
406                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG4
407                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG5
408                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG6
409                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG7
410                  のいずれかを設定します。
411                  */
412                 PicaDataFragLightEnvLayerConfig layerConfig;
413 
414                 /*!
415                     @brief フレネルの適用先の設定です。
416                            型は @ref PicaDataFragLightEnvFresnel です。
417                 */
418                 /*
419                  PICA_DATA_FRAG_LIGHT_ENV_NO_FRESNEL
420                  PICA_DATA_FRAG_LIGHT_ENV_PRI_ALPHA_FRESNEL
421                  PICA_DATA_FRAG_LIGHT_ENV_SEC_ALPHA_FRESNEL
422                  PICA_DATA_FRAG_LIGHT_ENV_PRI_SEC_ALPHA_FRESNEL
423                  のいずれかを指定します。
424                  */
425                 PicaDataFragLightEnvFresnel  fresnelSelector;
426 
427                 /*!
428                     @brief シャドウ調整要素をサンプルするテクスチャの設定です。
429                            型は @ref PicaDataFragLightTexture です。
430                 */
431                 /*
432                  PICA_DATA_FRAG_LIGHT_TEXTURE0
433                  PICA_DATA_FRAG_LIGHT_TEXTURE1
434                  PICA_DATA_FRAG_LIGHT_TEXTURE2
435                  PICA_DATA_FRAG_LIGHT_TEXTURE3
436                  のいずれかを設定します。
437                  */
438                 PicaDataFragLightEnvTexture     shadowSelector;
439 
440                 /*!
441                     @brief バンプマッピングの設定です。
442                            型は @ref PicaDataFragLightEnvBump です。
443                 */
444                 /*
445                  PICA_DATA_FRAG_LIGHT_ENV_BUMP_NOT_USED_DMP
446                  PICA_DATA_FRAG_LIGHT_ENV_BUMP_AS_BUMP_DMP
447                  PICA_DATA_FRAG_LIGHT_ENV_BUMP_AS_TANG_DMP
448                  のいずれかを設定します。
449                  */
450                 PicaDataFragLightEnvBump        bumpMode;
451 
452                 /*!
453                     @brief 法線マップ、タンジェントマップとして使用されるテクスチャの設定です。
454                            型は @ref PicaDataFragLightTexture です。
455                 */
456                 /*
457                  PICA_DATA_FRAG_LIGHT_TEXTURE0
458                  PICA_DATA_FRAG_LIGHT_TEXTURE1
459                  PICA_DATA_FRAG_LIGHT_TEXTURE2
460                  PICA_DATA_FRAG_LIGHT_TEXTURE3
461                  のいずれかを設定します。
462                  */
463                 PicaDataFragLightEnvTexture     bumpSelector;
464 
465                 /*!
466                     @brief プライマリカラーにシャドウの減衰を適用するかどうかの設定です。
467                            型は bool です。
468                 */
469                 bool                         isEnableShadowPrimary;
470 
471                 /*!
472                     @brief セカンダリカラーにシャドウの減衰を適用するかどうかの設定です。
473                            型は bool です。
474                 */
475                 bool                         isEnableShadowSecondary;
476 
477                 /*!
478                     @brief アルファ成分にシャドウの減衰を適用するかどうかの設定です。
479                            型は bool です。
480                 */
481                 bool                         isEnableShadowAlpha;
482 
483                 /*!
484                     @brief シャドウ減衰を反転するかどうかの設定です。
485                            型は bool です。
486                 */
487                 bool                         isInvertShadow;
488 
489                 /*!
490                     @brief 法線マップのz成分を再生成するかどうかの設定です。
491                            型は bool です。
492                 */
493                 bool                         isEnableBumpRenorm;
494 
495                 /*!
496                     @brief L.n < 0時に鏡面光カラーを0にクランプするかの設定です。
497                            型は bool です。
498                 */
499                 bool                         isEnableClampHighLights;
500 
501                 /*!
502                     @brief true の場合、「分布 0」項に、参照テーブルの値、もしくは、1 が設定されます。
503                     型は bool です。
504                     初期値は false です。
505                 */
506                 /*
507                  * このフラグにtrueを設定すると、
508                  * レイヤーコンフィグが D0 を使用する設定になっている場合、「分布 0」項に参照テーブルの値が適用されます。
509                  * レイヤーコンフィグが D0 を使用する設定になっていない場合、1 になります。
510                  * このフラグにfalseを設定すると、レイヤーコンフィグの設定にかかわらず 0 になります。
511                  * 初期値は false です。
512                  */
513                 bool                         isEnableLutD0;
514 
515                 /*!
516                     @brief true の場合、「分布 1」項に、参照テーブルの値、もしくは、1 が設定されます。
517                            型は bool です。
518                            初期値は false です。
519                 */
520                 /*
521                  * このフラグにtrueを設定すると、
522                  * レイヤーコンフィグが D1 を使用する設定になっている場合、「分布 1」項に参照テーブルの値が適用されます。
523                  * レイヤーコンフィグが D1 を使用する設定になっていない場合、1 になります。
524                  * このフラグにfalseを設定すると、レイヤーコンフィグの設定にかかわらず 0 になります。
525                  * 初期値は false です。
526                  */
527                 bool                         isEnableLutD1;
528 
529                 /*!
530                     @brief true の場合、「反射」項に、参照テーブルの値、もしくは、1 が設定されます。
531                            型は bool です。
532                            初期値は true です。
533                 */
534                 /*
535                  * このフラグにtrueを設定すると、
536                  * レイヤーコンフィグが RR、RG、RB を使用する設定になっている場合、それぞれの「反射」項に参照テーブルの値が適用されます。
537                  * レイヤーコンフィグが RR、RG、RB を使用する設定になっていない場合、1 になります。
538                  * このフラグにfalseを設定すると、レイヤーコンフィグの設定にかかわらず 0 になります。
539                  * 初期値は true です。
540                  */
541 
542                 bool                         isEnableLutRefl;
543                 NN_PADDING2;
544 
545 
546 
547                 /*!
548                     @brief 参照テーブルの値の調整のためのクラスです。
549                 */
550                 class LutConfig
551                 {
552                 public :
553                     /*!
554                         @brief 参照テーブル引数の設定です。
555                                型は @ref PicaDataFragLightEnvLutInput です。
556                     */
557                     /*
558                      設定可能な値は、
559                      PICA_DATA_FRAG_LIGHT_ENV_NH_DMP
560                      PICA_DATA_FRAG_LIGHT_ENV_VH_DMP
561                      PICA_DATA_FRAG_LIGHT_ENV_NV_DMP
562                      PICA_DATA_FRAG_LIGHT_ENV_LN_DMP
563                      PICA_DATA_FRAG_LIGHT_ENV_SP_DMP
564                      PICA_DATA_FRAG_LIGHT_ENV_CP_DMP
565                      のいずれかです。
566                      */
567                     PicaDataFragLightEnvLutInput input;
568 
569                     /*!
570                         @brief 参照テーブルの引数の範囲の設定です。
571                                型は bool です。
572                     */
573                     /*
574                      * 参照テーブルの引数の範囲を[0, 1] にする場合は true、 [-1, 1]にする場合は false を設定します。
575                      */
576                     bool isAbs;
577 
578                     /*!
579                         @brief 参照テーブルの出力にかけるスケールの設定です。
580                             型は @ref PicaDataFragLightEnvLutScale です。
581                      */
582                     PicaDataFragLightEnvLutScale scale;
583 
584                     NN_PADDING1;
585 
586                     /*!
587                         @brief 初期値を設定します。
588                     */
589                     explicit LutConfig();
590                 };
591 
592                 /*!
593                     @brief 参照テーブルD0についての設定です。
594                            型は nn::gr:CTR::FragmentLight::LutConfig です。
595                 */
596                 LutConfig lutConfigD0;
597 
598                 /*!
599                     @brief 参照テーブルD1についての設定です。
600                            型は nn::gr:CTR::FragmentLight::LutConfig です。
601                 */
602                 LutConfig lutConfigD1;
603 
604                 /*!
605                     @brief 参照テーブルSPについての設定です。
606                            型は nn::gr:CTR::FragmentLight::LutConfig です。
607                 */
608                 LutConfig lutConfigSP;
609 
610                 /*!
611                     @brief 参照テーブルFRについての設定です。
612                            型は nn::gr:CTR::FragmentLight::LutConfig です。
613                 */
614                 LutConfig lutConfigFR;
615 
616                 /*!
617                     @brief 参照テーブルRBについての設定です。
618                            型は nn::gr:CTR::FragmentLight::LutConfig です。
619                 */
620                 LutConfig lutConfigRB;
621 
622                 /*!
623                     @brief 参照テーブルRGについての設定です。
624                            型は nn::gr:CTR::FragmentLight::LutConfig です。
625                 */
626                 LutConfig lutConfigRG;
627 
628                 /*!
629                     @brief 参照テーブルRRについての設定です。
630                            型は nn::gr:CTR::FragmentLight::LutConfig です。
631                 */
632                 LutConfig lutConfigRR;
633 
634             public :
635                 /*!
636                     @brief 各設定の初期値を設定します。
637                 */
638                 FragmentLight();
639 
640                 /*!
641                     @brief 設定された情報をもとに、フラグメントライティングの光源ごとの設定コマンドを生成します。
642 
643                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
644 
645                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
646                  */
647                 bit32* MakeLightSourceCommand( bit32* command ) const;
648 
649                 /*
650                     @brief 設定された情報をもとに、フラグメントライティングの参照テーブル設定のコマンドを生成します。
651 
652                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
653 
654                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
655                  */
656                 bit32* MakeLutConfigCommand( bit32* command ) const;
657 
658                 /*!
659                     @brief 設定された情報をもとに、フラグメントライティングのライト環境の設定コマンドを生成します。
660 
661                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
662                     @param[in] isAddDummyCommand 0x8f レジスタに書き込む前に 0x80 へのダミーコマンドを生成します。
663 
664                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
665                  */
666                 bit32* MakeLightEnvCommand( bit32* command, bool isAddDummyCommand = true ) const;
667 
668                 /*!
669                     @brief 設定された情報をもとに、フラグメントライティングの設定コマンドを生成します。
670 
671                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
672                     @param[in] isAddDummyCommand 0x8f レジスタに書き込む前に 0x80 へのダミーコマンドを生成します。
673 
674                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
675                  */
676                 bit32* MakeAllCommand( bit32* command, bool isAddDummyCommand = true ) const;
677 
678                 /*!
679                     @brief フラグメントライティングを無効化する最低限のコマンドを生成します。
680 
681                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
682                     @param[in] isAddDummyCommand 0x8f レジスタに書き込む前に 0x80 へのダミーコマンドを生成します。
683 
684                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
685                  */
686                 static bit32* MakeDisableCommand( bit32* command, bool isAddDummyCommand = true );
687             };
688 
689         } // namespace CTR
690     } // namespace gr
691 } // namespace nn
692 
693 #endif // NN_GR_FRAGMENT_LIGHT_H_
694