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