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: 29329 $
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::isEnableLutRefl に 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::isEnableLutRefl に 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::isEnableLutRefl に 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                                型は bit32 です。
184                     */
185                     bit32  posXY;
186 
187                     /*!
188                          @brief ライト位置のZを描画コマンド形式に変換して保持します。
189                                 型は bit32 です。
190                      */
191                     bit32  posZ;
192 
193                     /*!
194                          @brief ライト位置を無限遠に飛ばすかどうかのフラグです。
195                                 型は u8 です。
196                      */
197                     u8   isInfinity;
198                     NN_PADDING3;
199 
200                     /*!
201                          @brief 距離減衰のバイアスを描画コマンド形式に変換して保持します。
202                                 型は bit32 です。
203                      */
204                     bit32 distAttnBias;
205 
206                     /*!
207                          @brief 距離減衰のスケールを描画コマンド形式に変換して保持します。
208                                 型は bit32 です。
209                      */
210                     bit32 distAttnScale;
211 
212                     /*!
213                          @brief スポットライト向きのX,Yを描画コマンド形式に変換して保持します。
214                                 型は bit32 です。
215                      */
216                     bit32 spotDirectionXY;
217 
218                     /*!
219                          @brief スポットライト向きのZを描画コマンド形式に変換して保持します。
220                                 型は bit32 です。
221                      */
222                     bit32 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                     bit32* MakeCommand( bit32* command ) const;
318 
319                 public :
320                     /*!
321                         @brief 初期値で初期化します。
322                     */
323                     explicit Source();
324                 };
325 
326             public :
327                 //! 光源の最大数は8です。
328                 static const u32 LIGHT_SOURCE_MAX = 8;
329 
330                 /*!
331                     @brief グローバルアンビエントの赤成分の設定です。
332                            型は u8 です。
333                            [0.f, 1.f]を[0, 255]にマップして設定します。
334                 */
335                 // dmp_FragmentMaterial.emission+dmp_FragmentMaterial.ambient×dmp_FragmentLighting.ambientの値[0.f, 1.f]を
336                 // [0, 255]にマップして設定します。
337                 u8 globalAmbientR;
338 
339 
340                 /*!
341                     @brief グローバルアンビエントの緑成分の設定です。
342                            型は u8 です。
343                            [0.f, 1.f]を[0, 255]にマップして設定します。
344                  */
345                  // dmp_FragmentMaterial.emission+dmp_FragmentMaterial.ambient×dmp_FragmentLighting.ambientの値[0.f, 1.f]を
346                  // [0, 255]にマップして設定します。
347                 u8 globalAmbientG;
348 
349 
350                 /*!
351                     @brief グローバルアンビエントの青成分の設定です。
352                            型は u8 です。
353                            [0.f, 1.f]を[0, 255]にマップして設定します。
354                  */
355                  // dmp_FragmentMaterial.emission+dmp_FragmentMaterial.ambient×dmp_FragmentLighting.ambientの値[0.f, 1.f]を
356                  // [0, 255]にマップして設定します。
357                 u8 globalAmbientB;
358                 NN_PADDING1;
359 
360 
361                 /*!
362                     @brief 光源の設定を保持します。
363                            型は nn::gr::CTR::FragmentLight::Source です。
364                 */
365                 Source source[ LIGHT_SOURCE_MAX ];
366 
367                 /*!
368                     @brief 光源の有効無効を設定します。
369                            型は, bool[] です。
370                            配列の上限値は, LIGHT_SOURCE_MAX です。
371                 */
372                 bool isEnable[ LIGHT_SOURCE_MAX ];
373 
374                 /*!
375                     @brief スポットライトが有効かどうかの設定です。
376                            型は, bool[] です。
377                            配列の上限値は, LIGHT_SOURCE_MAX です。
378                 */
379                 bool isEnableSpot[ LIGHT_SOURCE_MAX ];
380 
381                 /*!
382                     @brief 距離減衰の有効無効の設定です。
383                            型は, bool[] です。
384                            配列の上限値は, LIGHT_SOURCE_MAX です。
385                 */
386                 bool isEnableDistAttn[ LIGHT_SOURCE_MAX ];
387 
388                 /*!
389                     @brief シャドウ調整要素の設定です。
390                            型は, bool[] です。
391                            配列の上限値は, LIGHT_SOURCE_MAX です。
392                 */
393                 bool isShadowed[ LIGHT_SOURCE_MAX ];
394 
395                 /*!
396                     @brief レイヤーコンフィグの設定です。
397                            型は @ref PicaDataFragLightEnvLayerConfig です。
398                 */
399                 /*
400                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG0
401                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG1
402                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG2
403                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG3
404                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG4
405                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG5
406                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG6
407                  PICA_DATA_FRAG_LIGHT_ENV_LAYER_CONFIG7
408                  のいずれかを設定します。
409                  */
410                 PicaDataFragLightEnvLayerConfig layerConfig;
411 
412                 /*!
413                     @brief フレネルの適用先の設定です。
414                            型は @ref PicaDataFragLightEnvFresnel です。
415                 */
416                 /*
417                  PICA_DATA_FRAG_LIGHT_ENV_NO_FRESNEL
418                  PICA_DATA_FRAG_LIGHT_ENV_PRI_ALPHA_FRESNEL
419                  PICA_DATA_FRAG_LIGHT_ENV_SEC_ALPHA_FRESNEL
420                  PICA_DATA_FRAG_LIGHT_ENV_PRI_SEC_ALPHA_FRESNEL
421                  のいずれかを指定します。
422                  */
423                 PicaDataFragLightEnvFresnel  fresnelSelector;
424 
425                 /*!
426                     @brief シャドウ調整要素をサンプルするテクスチャの設定です。
427                            型は @ref PicaDataFragLightTexture です。
428                 */
429                 /*
430                  PICA_DATA_FRAG_LIGHT_TEXTURE0
431                  PICA_DATA_FRAG_LIGHT_TEXTURE1
432                  PICA_DATA_FRAG_LIGHT_TEXTURE2
433                  PICA_DATA_FRAG_LIGHT_TEXTURE3
434                  のいずれかを設定します。
435                  */
436                 PicaDataFragLightEnvTexture     shadowSelector;
437 
438                 /*!
439                     @brief バンプマッピングの設定です。
440                            型は @ref PicaDataFragLightEnvBump です。
441                 */
442                 /*
443                  PICA_DATA_FRAG_LIGHT_ENV_BUMP_NOT_USED_DMP
444                  PICA_DATA_FRAG_LIGHT_ENV_BUMP_AS_BUMP_DMP
445                  PICA_DATA_FRAG_LIGHT_ENV_BUMP_AS_TANG_DMP
446                  のいずれかを設定します。
447                  */
448                 PicaDataFragLightEnvBump        bumpMode;
449 
450                 /*!
451                     @brief 法線マップ、タンジェントマップとして使用されるテクスチャの設定です。
452                            型は @ref PicaDataFragLightTexture です。
453                 */
454                 /*
455                  PICA_DATA_FRAG_LIGHT_TEXTURE0
456                  PICA_DATA_FRAG_LIGHT_TEXTURE1
457                  PICA_DATA_FRAG_LIGHT_TEXTURE2
458                  PICA_DATA_FRAG_LIGHT_TEXTURE3
459                  のいずれかを設定します。
460                  */
461                 PicaDataFragLightEnvTexture     bumpSelector;
462 
463                 /*!
464                     @brief プライマリカラーにシャドウの減衰を適用するかどうかの設定です。
465                            型は bool です。
466                 */
467                 bool                         isEnableShadowPrimary;
468 
469                 /*!
470                     @brief セカンダリカラーにシャドウの減衰を適用するかどうかの設定です。
471                            型は bool です。
472                 */
473                 bool                         isEnableShadowSecondary;
474 
475                 /*!
476                     @brief アルファ成分にシャドウの減衰を適用するかどうかの設定です。
477                            型は bool です。
478                 */
479                 bool                         isEnableShadowAlpha;
480 
481                 /*!
482                     @brief シャドウ減衰を反転するかどうかの設定です。
483                            型は bool です。
484                 */
485                 bool                         isInvertShadow;
486 
487                 /*!
488                     @brief 法線マップのz成分を再生成するかどうかの設定です。
489                            型は bool です。
490                 */
491                 bool                         isEnableBumpRenorm;
492 
493                 /*!
494                     @brief L.n < 0時に鏡面光カラーを0にクランプするかの設定です。
495                            型は bool です。
496                 */
497                 bool                         isEnableClampHighLights;
498 
499                 /*!
500                     @brief true の場合、「分布 0」項に、参照テーブルの値、もしくは、1 が設定されます。
501                     型は bool です。
502                     初期値は false です。
503                 */
504                 /*
505                  * このフラグにtrueを設定すると、
506                  * レイヤーコンフィグが D0 を使用する設定になっている場合、「分布 0」項に参照テーブルの値が適用されます。
507                  * レイヤーコンフィグが D0 を使用する設定になっていない場合、1 になります。
508                  * このフラグにfalseを設定すると、レイヤーコンフィグの設定にかかわらず 0 になります。
509                  * 初期値は false です。
510                  */
511                 bool                         isEnableLutD0;
512 
513                 /*!
514                     @brief true の場合、「分布 1」項に、参照テーブルの値、もしくは、1 が設定されます。
515                            型は bool です。
516                            初期値は false です。
517                 */
518                 /*
519                  * このフラグにtrueを設定すると、
520                  * レイヤーコンフィグが D1 を使用する設定になっている場合、「分布 1」項に参照テーブルの値が適用されます。
521                  * レイヤーコンフィグが D1 を使用する設定になっていない場合、1 になります。
522                  * このフラグにfalseを設定すると、レイヤーコンフィグの設定にかかわらず 0 になります。
523                  * 初期値は false です。
524                  */
525                 bool                         isEnableLutD1;
526 
527                 /*!
528                     @brief true の場合、「反射」項に、参照テーブルの値、もしくは、1 が設定されます。
529                            型は bool です。
530                            初期値は true です。
531                 */
532                 /*
533                  * このフラグにtrueを設定すると、
534                  * レイヤーコンフィグが RR、RG、RB を使用する設定になっている場合、それぞれの「反射」項に参照テーブルの値が適用されます。
535                  * レイヤーコンフィグが RR、RG、RB を使用する設定になっていない場合、1 になります。
536                  * このフラグにfalseを設定すると、レイヤーコンフィグの設定にかかわらず 0 になります。
537                  * 初期値は true です。
538                  */
539 
540                 bool                         isEnableLutRefl;
541                 NN_PADDING2;
542 
543 
544 
545                 /*!
546                     @brief 参照テーブルの値の調整のためのクラスです。
547                 */
548                 class LutConfig
549                 {
550                 public :
551                     /*!
552                         @brief 参照テーブル引数の設定です。
553                                型は @ref PicaDataFragLightEnvLutInput です。
554                     */
555                     /*
556                      設定可能な値は、
557                      PICA_DATA_FRAG_LIGHT_ENV_NH_DMP
558                      PICA_DATA_FRAG_LIGHT_ENV_VH_DMP
559                      PICA_DATA_FRAG_LIGHT_ENV_NV_DMP
560                      PICA_DATA_FRAG_LIGHT_ENV_LN_DMP
561                      PICA_DATA_FRAG_LIGHT_ENV_SP_DMP
562                      PICA_DATA_FRAG_LIGHT_ENV_CP_DMP
563                      のいずれかです。
564                      */
565                     PicaDataFragLightEnvLutInput input;
566 
567                     /*!
568                         @brief 参照テーブルの引数の範囲の設定です。
569                                型は bool です。
570                     */
571                     /*
572                      * 参照テーブルの引数の範囲を[0, 1] にする場合は true、 [-1, 1]にする場合は false を設定します。
573                      */
574                     bool isAbs;
575 
576                     /*!
577                         @brief 参照テーブルの出力にかけるスケールの設定です。
578                             型は @ref PicaDataFragLightEnvLutScale です。
579                     */
580                     /*
581                      設定可能な値は、
582                      PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_1_0
583                      PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_2_0
584                      PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_4_0
585                      PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_8_0
586                      PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_0_25
587                      PICA_DATA_FRAG_LIGHT_ENV_LUTSCALE_0_5
588                      のいずれかです。
589                      */
590                     PicaDataFragLightEnvLutScale scale;
591 
592                     NN_PADDING1;
593 
594                     /*!
595                         @brief 初期値を設定します。
596                     */
597                     explicit LutConfig();
598                 };
599 
600                 /*!
601                     @brief 参照テーブルD0についての設定です。
602                            型は nn::gr:CTR::FragmentLight::LutConfig です。
603                 */
604                 LutConfig lutConfigD0;
605 
606                 /*!
607                     @brief 参照テーブルD1についての設定です。
608                            型は nn::gr:CTR::FragmentLight::LutConfig です。
609                 */
610                 LutConfig lutConfigD1;
611 
612                 /*!
613                     @brief 参照テーブルSPについての設定です。
614                            型は nn::gr:CTR::FragmentLight::LutConfig です。
615                 */
616                 LutConfig lutConfigSP;
617 
618                 /*!
619                     @brief 参照テーブルFRについての設定です。
620                            型は nn::gr:CTR::FragmentLight::LutConfig です。
621                 */
622                 LutConfig lutConfigFR;
623 
624                 /*!
625                     @brief 参照テーブルRBについての設定です。
626                            型は nn::gr:CTR::FragmentLight::LutConfig です。
627                 */
628                 LutConfig lutConfigRB;
629 
630                 /*!
631                     @brief 参照テーブルRGについての設定です。
632                            型は nn::gr:CTR::FragmentLight::LutConfig です。
633                 */
634                 LutConfig lutConfigRG;
635 
636                 /*!
637                     @brief 参照テーブルRRについての設定です。
638                            型は nn::gr:CTR::FragmentLight::LutConfig です。
639                 */
640                 LutConfig lutConfigRR;
641 
642             public :
643                 /*!
644                     @brief 各設定の初期値を設定します。
645                 */
646                 FragmentLight();
647 
648                 /*!
649                     @brief 設定された情報をもとに、フラグメントライティングの光源ごとの設定コマンドを生成します。
650 
651                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
652 
653                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
654                  */
655                 bit32* MakeLightSourceCommand( bit32* command ) const;
656 
657                 /*
658                     @brief 設定された情報をもとに、フラグメントライティングの参照テーブル設定のコマンドを生成します。
659 
660                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
661 
662                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
663                  */
664                 bit32* MakeLutConfigCommand( bit32* command ) const;
665 
666                 /*!
667                     @brief 設定された情報をもとに、フラグメントライティングのライト環境の設定コマンドを生成します。
668 
669                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
670                     @param[in] isAddDummyCommand 0x8f レジスタに書き込む前に 0x80 へのダミーコマンドを生成します。
671 
672                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
673                  */
674                 bit32* MakeLightEnvCommand( bit32* command, bool isAddDummyCommand = true ) const;
675 
676                 /*!
677                     @brief 設定された情報をもとに、フラグメントライティングの設定コマンドを生成します。
678 
679                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
680                     @param[in] isAddDummyCommand 0x8f レジスタに書き込む前に 0x80 へのダミーコマンドを生成します。
681 
682                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
683                  */
684                 bit32* MakeAllCommand( bit32* command, bool isAddDummyCommand = true ) const;
685             };
686 
687         } // namespace CTR
688     } // namespace gr
689 } // namespace nn
690 
691 #endif // NN_GR_FRAGMENT_LIGHT_H_
692