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