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