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