1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gr_ProcedureTexture.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_PROCEDURE_TEXTURE_H_ 17 #define NN_GR_PROCEDURE_TEXTURE_H_ 18 19 #include <nn/gr/CTR/gr_Utility.h> 20 21 namespace nn 22 { 23 namespace gr 24 { 25 namespace CTR 26 { 27 28 /*! 29 @brief プロシージャルテクスチャのコマンドを生成するのためのクラスです。 30 */ 31 class ProcedureTexture 32 { 33 public: 34 static const u32 PROCTEX_LOOKUP_TABLE_ELEMENT_NUM = 128; //!< 参照テーブルは 128 個のデータを持ちます。 35 static const u32 PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM = 256; //!< カラー用の参照テーブルは 256 個のデータを持ちます。 36 37 public : 38 /*! 39 @brief RGB のマッピング関数のモードです。 40 型は @ref PicaDataProcTexMap です。 41 dmp_Texture[3].ptRgbMap ユニフォームに相当します。 42 */ 43 PicaDataProcTexMap rgbMap; 44 45 /*! 46 @brief アルファのマッピング関数のモードです。 47 型は @ref PicaDataProcTexMap です。 48 dmp_Texture[3].ptAlphaMap ユニフォームに相当します。 49 */ 50 51 PicaDataProcTexMap alphaMap; 52 53 /*! 54 @brief マッピング関数でアルファを独立して扱うかどうかです。 55 型は bool です。 56 dmp_Texture[3].ptAlphaSeparate ユニフォームに相当します。 57 */ 58 bool alphaSeparate; 59 60 /*! 61 @brief テクスチャの U 方向のクランプのモードです。 62 型は @ref PicaDataProcTexClamp です。 63 dmp_Texture[3].ptClampU ユニフォームに相当します。 64 */ 65 PicaDataProcTexClamp clampU; 66 67 /*! 68 @brief テクスチャの V 方向のクランプのモードです。 69 型は @ref PicaDataProcTexClamp です。 70 dmp_Texture[3].ptClampV ユニフォームに相当します。 71 */ 72 PicaDataProcTexClamp clampV; 73 74 /*! 75 @brief テクスチャの U 方向のシフト計算のモードです。 76 型は @ref PicaDataProcTexShift です。 77 dmp_Texture[3].ptShiftU ユニフォームに相当します。 78 */ 79 PicaDataProcTexShift shiftU; 80 81 /*! 82 @brief テクスチャの V 方向のシフト計算のモードです。 83 型は @ref PicaDataProcTexShift です。 84 dmp_Texture[3].ptShiftV ユニフォームに相当します。 85 */ 86 PicaDataProcTexShift shiftV; 87 88 /*! 89 @brief テクスチャの MinFilter の設定です。 90 型は @ref PicaDataProcTexFilter です。 91 dmp_Texture[3].ptMinFilter ユニフォームに相当します。 92 */ 93 PicaDataProcTexFilter minFilter; 94 95 /*! 96 @brief カラー参照テーブルの LOD バイアスです。 97 型は f32 で値は [0.0, 6.0] でデフォルト値は 0.5f です。 98 dmp_Texture[3].texBias ユニフォームに相当します。 99 */ 100 f32 texBias; 101 102 /*! 103 @brief 使用される部分配列の先頭要素を指定します。 104 型は u8 で、値は [0, 128] でデフォルト値は 0 です。 105 dmp_Texture[3].ptTexOffset ユニフォームに相当します。 106 */ 107 u8 texOffset; 108 109 /*! 110 @brief 参照テーブルのデータ幅を指定します 111 型は u8 で、値は [0, 128] でデフォルト値は 0 です。 112 dmp_Texture[3].ptTexWidth ユニフォームに相当します。 113 */ 114 u8 texWidth; 115 116 /*! 117 @brief ノイズを有効化します。 118 型は bool で、デフォルト値は false です。 119 dmp_Texture[3].ptNoiseEnable ユニフォームに相当します。 120 */ 121 bool isEnableNoise; 122 NN_PADDING1; 123 124 /*! 125 @brief テクスチャの U 方向のノイズの振幅を設定します。 126 型は f32 で、デフォルト値は 0.0f です。 127 dmp_Texture[3].ptNoiseU[2] ユニフォームに相当します。 128 */ 129 f32 noiseUAmplitude; 130 131 /*! 132 @brief テクスチャの V 方向のノイズの振幅を設定します。 133 型は f32 で、デフォルト値は 0.0f です。 134 dmp_Texture[3].ptNoiseV[2] ユニフォームに相当します。 135 */ 136 f32 noiseVAmplitude; 137 138 /*! 139 @brief テクスチャの U 方向のノイズの周波数を設定します。 140 型は f32 で、デフォルト値は 0.0f です。 141 dmp_Texture[3].ptNoiseU[0] ユニフォームに相当します。 142 */ 143 f32 noiseUFrequency; 144 145 /*! 146 @brief テクスチャの V 方向のノイズの周波数を設定します。 147 型は f32 で、デフォルト値は 0.0f です。 148 dmp_Texture[3].ptNoiseV[0] ユニフォームに相当します。 149 */ 150 f32 noiseVFrequency; 151 152 /*! 153 @brief テクスチャの U 方向のノイズの位相を設定します。 154 型は f32 で、デフォルト値は 0.0f です。 155 dmp_Texture[3].ptNoiseU[1] ユニフォームに相当します。 156 */ 157 f32 noiseUPhase; 158 159 /*! 160 @brief テクスチャの V 方向のノイズの位相を設定します。 161 型は f32 で、デフォルト値は 0.0f です。 162 dmp_Texture[3].ptNoiseV[1] ユニフォームに相当します。 163 */ 164 f32 noiseVPhase; 165 166 public : 167 /*! 168 @brief ノイズの連続性関数の参照テーブルを設定します。 169 170 @param[in] lookUpTable 128個の参照データです。 171 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 172 */ 173 void SetNoiseLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 174 const u32 lookUpTableIndex = 0 ); 175 176 /*! 177 @brief ノイズの連続性関数の参照テーブルを設定します。 178 179 @param[in] lookUpTable 128個の参照データです。 180 @param[in] diffLookUpTable 128個の参照データの差分値です。 181 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 182 */ 183 void SetNoiseLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 184 const f32 diffLookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 185 const u32 lookUpTableIndex = 0 ); 186 187 /*! 188 @brief RGB のマッピング関数の参照テーブルを設定します。 189 190 @param[in] lookUpTable 128個の参照データです。 191 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 192 */ 193 void SetRgbMapLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 194 const u32 lookUpTableIndex = 0 ); 195 196 /*! 197 @brief RGB のマッピング関数の参照テーブルを設定します。 198 199 @param[in] lookUpTable 128個の参照データです。 200 @param[in] diffLookUpTable 128個の参照データの差分値です。 201 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 202 */ 203 void SetRgbMapLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 204 const f32 diffLookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 205 const u32 lookUpTableIndex = 0 ); 206 207 /*! 208 @brief アルファのマッピング関数の参照テーブルを設定します。 209 210 @param[in] lookUpTable 128個の参照データです。 211 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 212 */ 213 void SetAlphaMapLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 214 const u32 lookUpTableIndex = 0 ); 215 216 217 /*! 218 @brief アルファのマッピング関数の参照テーブルを設定します。 219 220 @param[in] lookUpTable 128個の参照データです。 221 @param[in] diffLookUpTable 128個の参照データの差分値です。 222 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 223 */ 224 void SetAlphaMapLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 225 const f32 diffLookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 226 const u32 lookUpTableIndex = 0 ); 227 228 /*! 229 @brief 赤成分のカラー参照テーブルを設定します。 230 231 @param[in] lookUpTable 赤成分の256個の参照データです。 232 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 233 */ 234 void SetRedLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 235 const u32 lookUpTableIndex = 0 ); 236 237 /*! 238 @brief 赤成分のカラー参照テーブルを設定します。 239 240 @param[in] lookUpTable 赤成分の256個の参照データです。 241 @param[in] lookUpDiffTable 赤成分の256個の参照データの差分値です。 242 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 243 @param[in] diffLookUpTableIndex 参照テーブルの差分値のインデックスです。 244 */ 245 void SetRedLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 246 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 247 const u32 lookUpTableIndex = 0, 248 const u32 diffLookUpTableIndex = 0 ); 249 250 /*! 251 @brief 緑成分のカラー参照テーブルを設定します。 252 253 @param[in] lookUpTable 緑成分の256個の参照データです。 254 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 255 */ 256 void SetGreenLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 257 const u32 lookUpTableIndex = 0 ); 258 259 /*! 260 @brief 緑成分のカラー参照テーブルを設定します。 261 262 @param[in] lookUpTable 緑成分の256個の参照データです。 263 @param[in] lookUpDiffTable 緑成分の256個の参照データの差分値です。 264 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 265 @param[in] diffLookUpTableIndex 参照テーブルの差分値のインデックスです。 266 */ 267 void SetGreenLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 268 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 269 const u32 lookUpTableIndex = 0, 270 const u32 diffLookUpTableIndex = 0 ); 271 272 /*! 273 @brief 青成分のカラー参照テーブルを設定します。 274 275 @param[in] lookUpTable 青成分の256個の参照データです。 276 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 277 */ 278 void SetBlueLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 279 const u32 lookUpTableIndex = 0 ); 280 281 /*! 282 @brief 青成分のカラー参照テーブルを設定します。 283 284 @param[in] lookUpTable 青成分の256個の参照データです。 285 @param[in] lookUpDiffTable 青成分の256個の参照データの差分値です。 286 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 287 @param[in] diffLookUpTableIndex 参照テーブルの差分値のインデックスです。 288 */ 289 void SetBlueLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 290 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 291 const u32 lookUpTableIndex = 0, 292 const u32 diffLookUpTableIndex = 0 ); 293 294 /*! 295 @brief アルファ成分のカラー参照テーブルを設定します。 296 297 @param[in] lookUpTable アルファ成分の256個の参照データです。 298 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 299 */ 300 void SetAlphaLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 301 const u32 lookUpTableIndex = 0 ); 302 303 /*! 304 @brief アルファ成分のカラー参照テーブルを設定します。 305 306 @param[in] lookUpTable アルファ成分の256個の参照データです。 307 @param[in] lookUpDiffTable アルファ成分の256個の参照データの差分値です。 308 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 309 @param[in] diffLookUpTableIndex 参照テーブルの差分値のインデックスです。 310 */ 311 void SetAlphaLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 312 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 313 const u32 lookUpTableIndex = 0, 314 const u32 diffLookUpTableIndex = 0 ); 315 316 /*! 317 @brief プロシージャルテクスチャのレジスタを設定する全てのコマンドを生成します。 318 319 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 320 @param[in] isAddDummyCommand 0x80 へのダミー書き込みコマンドを 3回 生成します。 321 322 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 323 */ 324 bit32* MakeAllCommand( bit32* command, bool isAddDummyCommand = true ) const 325 { 326 // 設定用コマンド 327 command = MakeConfigCommand( command, isAddDummyCommand ); 328 329 // プロシージャルテクスチャの参照テーブルのコマンド 330 command = MakeTableCommand( command ); 331 332 return command; 333 } 334 335 336 /*! 337 @brief プロシージャルテクスチャの全ての設定のコマンドを生成します。(参照テーブルのコマンドは生成しません。) 338 339 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 340 @param[in] isAddDummyCommand レジスタの変更前に、0x80 へのダミー書き込みコマンドを 3回 生成します。 341 342 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 343 */ 344 bit32* MakeConfigCommand( bit32* command, bool isAddDummyCommand = true ) const 345 { 346 command = MakeProcedureTextureModeCommand( command, isAddDummyCommand ); 347 command = MakeTextureCommand( command, false, false ); 348 command = MakeNoiseCommand( command, false, false ); 349 350 return command; 351 } 352 353 /*! 354 @brief プロシージャルテクスチャのモード設定用のコマンドだけを生成します。 355 356 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 357 @param[in] isAddDummyCommand レジスタの変更前に、0x80 へのダミー書き込みコマンドを 3回 生成します。 358 359 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 360 */ 361 bit32* MakeProcedureTextureModeCommand( bit32* command, bool isAddDummyCommand = true ) const 362 { 363 if ( isAddDummyCommand ) 364 { 365 command = MakeDummyCommand( command ); 366 } 367 368 // f32 -> f16 369 u16 texBiasFloat16 = Float32ToFloat16( texBias ); 370 u8 texBiasFloat16Low8 = ( texBiasFloat16 & 0xFF ); 371 372 // 0x0a8 373 *command++ = PICA_CMD_DATA_PROCTEX0( clampU, clampV, 374 rgbMap, alphaMap, 375 ( alphaSeparate ? 1 : 0), 376 ( isEnableNoise ? 1 : 0 ), 377 shiftU, shiftV, 378 texBiasFloat16Low8 ); 379 *command++ = PICA_CMD_HEADER_SINGLE( PICA_REG_TEXTURE3_PROCTEX0 ); 380 381 return command; 382 } 383 384 /*! 385 @brief プロシージャルテクスチャのテクスチャ設定用のコマンドだけを生成します。 386 387 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 388 @param[in] isAddProcedureTextureModeCommand テクスチャに関連した texBias, clampU, clampV, shiftU, shiftV のいずれかのコマンドを生成したいときに true にします。 389 @param[in] isAddDummyCommand レジスタの変更前に、0x80 へのダミー書き込みコマンドを 3回 生成します。 390 391 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 392 */ 393 bit32* MakeTextureCommand( bit32* command, bool isAddProcedureTextureModeCommand = true, bool isAddDummyCommand = true ) const 394 { 395 if ( isAddProcedureTextureModeCommand ) 396 { 397 command = MakeProcedureTextureModeCommand( command, isAddDummyCommand ); 398 } 399 else if ( isAddDummyCommand ) 400 { 401 command = MakeDummyCommand( command ); 402 } 403 404 // f32 -> f16 405 u16 texBiasFloat16 = Float32ToFloat16( texBias ); 406 u8 texBiasFloat16Hi8 = ( ( texBiasFloat16 >> 8 ) & 0xFF ); 407 408 // 0x0ac 409 *command++ = PICA_CMD_DATA_PROCTEX4( minFilter, texWidth, texBiasFloat16Hi8 ); 410 *command++ = PICA_CMD_HEADER_BURSTSEQ( PICA_REG_TEXTURE3_PROCTEX4, 0x2 ); 411 412 // 0x0ad 413 *command++ = PICA_CMD_DATA_PROCTEX5( texOffset ); 414 // padding 415 *command++ = 0x0; 416 417 return command; 418 } 419 420 /*! 421 @brief プロシージャルテクスチャのノイズ設定用のコマンドだけを生成します。 422 423 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 424 @param[in] isAddProcedureTextureModeCommand ノイズに関連した isEnableNoise, rgbMap, alphaMap のいずれかのコマンドを生成したいときに true にします。 425 @param[in] isAddDummyCommand レジスタの変更前に、0x80 へのダミー書き込みコマンドを 3回 生成します。 426 427 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 428 */ 429 bit32* MakeNoiseCommand( bit32* command, bool isAddProcedureTextureModeCommand = true, bool isAddDummyCommand = true ) const 430 { 431 if ( isAddProcedureTextureModeCommand ) 432 { 433 command = MakeProcedureTextureModeCommand( command, isAddDummyCommand ); 434 } 435 else if ( isAddDummyCommand ) 436 { 437 command = MakeDummyCommand( command ); 438 } 439 440 // 0x0a9 441 *command++ = PICA_CMD_DATA_PROCTEX1( Float32ToFloat16( noiseUPhase ), 442 Float32ToFix16( noiseUAmplitude ) ); 443 *command++ = PICA_CMD_HEADER_BURSTSEQ( PICA_REG_TEXTURE3_PROCTEX1, 0x3 ); 444 445 // 0x0aa 446 *command++ = PICA_CMD_DATA_PROCTEX2( Float32ToFloat16( noiseVPhase ), 447 Float32ToFix16( noiseVAmplitude ) ); 448 // 0x0ab 449 *command++ = PICA_CMD_DATA_PROCTEX3( Float32ToFloat16( noiseUFrequency ), 450 Float32ToFloat16( noiseVFrequency ) ); 451 452 return command; 453 } 454 455 /*! 456 @brief プロシージャルテクスチャを参照テーブルのコマンドを生成します。 457 458 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 459 460 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 461 */ 462 bit32* MakeTableCommand( bit32* command ) const; 463 464 465 /*! 466 @brief プロシージャルテクスチャのレジスタを更新する前に必要な 0x80 へのダミーコマンドを生成します。 467 468 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 469 470 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 471 */ MakeDummyCommand(bit32 * command)472 static bit32* MakeDummyCommand( bit32* command ) 473 { 474 *command++ = 0x0; 475 *command++ = PICA_CMD_HEADER_BURST_BE( PICA_REG_TEXTURE_FUNC, 0x3, 0x0 ); 476 477 *command++ = 0x0; 478 *command++ = 0x0; 479 480 return command; 481 } 482 483 public : 484 /*! 485 @brief プロシージャルテクスチャのコマンドを生成するクラスのコンストラクタです。 486 */ ProcedureTexture()487 ProcedureTexture() : 488 rgbMap( PICA_DATA_PROCTEX_U_DMP ), 489 alphaMap( PICA_DATA_PROCTEX_U_DMP ), 490 alphaSeparate( false ), 491 clampU( PICA_DATA_PROCTEX_CLAMP_TO_EDGE ), clampV( PICA_DATA_PROCTEX_CLAMP_TO_EDGE ), 492 shiftU( PICA_DATA_PROCTEX_NONE_DMP ), shiftV( PICA_DATA_PROCTEX_NONE_DMP ), 493 minFilter( PICA_DATA_PROCTEX_LINEAR ), 494 texBias( 0.5f ), texOffset( 0 ), texWidth( 0 ), 495 isEnableNoise( false ), 496 noiseUAmplitude( 0.0f ), noiseVAmplitude( 0.0f ), 497 noiseUFrequency( 0.0f ), noiseVFrequency( 0.0f ), 498 noiseUPhase( 0.0f ), noiseVPhase( 0.0f ) 499 { 500 } 501 502 private: 503 /*! 504 @brief 描画コマンドの配列に、参照テーブルのコマンドを設定します。 505 506 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 507 @param[in] procTexLookUpTable 参照テーブルの種類です。 508 @param[in] lookUpTable 128個の参照テーブルです。 509 @param[in] diffLookUptable 128個の参照テーブルです。 510 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 511 */ 512 void SetLookUpDualTables_( bit32* command, 513 PicaDataProcTexRefTable procTexLookUpTable, 514 const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 515 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 516 const u32 lookUpTableIndex = 0 ); 517 518 /*! 519 @brief 描画コマンドの配列に、カラー用の参照テーブルと差分テーブルのコマンドを設定します。 520 521 @param[in] colorShiftNum 色成分の値を左シフトするビット数です。 522 @param[in] lookUpTable 参照テーブルです。 523 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 524 */ 525 void SetColorLookUpDualTables_( const u32 colorShiftNum, 526 const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 527 const u32 lookUpTableIndex = 0 ); 528 529 /*! 530 @brief 描画コマンドの配列に、カラーの参照テーブルのコマンドを設定します。 531 532 @param[in] colorShiftNum 色成分をコマンドに代入するときに、左シフトする回数です。 533 @param[in] lookUpTable 参照テーブルです。 534 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 535 */ 536 void SetColorLookUpTable_( const u32 colorShiftNum, 537 const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 538 const u32 lookUpTableIndex = 0 ); 539 540 /*! 541 @brief 描画コマンドの配列に、参照テーブルの差分値のコマンドを設定します。 542 543 @param[in] colorShiftNum 色成分をコマンドに代入するときに、左シフトする回数です。 544 @param[in] diffLookUpTable 参照テーブルの差分値です。 545 @param[in] diffLookUpTableIndex 参照テーブルのインデックスです。 546 */ 547 void SetColorDiffLookUpTable_( const u32 colorShiftNum, 548 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 549 const u32 diffLookUpTableIndex = 0 ); 550 551 /*! 552 @brief 256個の参照テーブルの差分値を求めます。 553 554 @param[in] lookUpTable 256個の参照テーブルです。 555 @param[out] diffLookUpTable 256個の参照テーブルの差分値です。 556 */ 557 void GetColorDiffLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 558 f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ] ); 559 560 /*! 561 @brief 128個の参照テーブルの差分値を求めます。 562 563 @param[in] lookUpTable 128個の参照テーブルです。 564 @param[out] diffLookUpTable 128個の参照テーブルの差分値です。 565 */ 566 void GetDiffLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 567 f32 diffLookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ] ); 568 569 private : 570 //! 参照テーブルを送るために追加するコマンドのサイズです。 571 static const u32 PROCTEX_LOOKUP_TABLE_OPTION_CMD_NUM = 4; 572 573 //! 参照テーブルを送るコマンドを保存する配列サイズです。 574 static const u32 PROCTEX_LOOKUP_TABLE_CMD_NUM = PROCTEX_LOOKUP_TABLE_ELEMENT_NUM + PROCTEX_LOOKUP_TABLE_OPTION_CMD_NUM; 575 576 //! カラー用の参照テーブルを送るために追加するコマンドのサイズです。 577 static const u32 PROCTEX_COLOR_LOOKUP_TABLE_OPTION_CMD_NUM = 6; 578 579 //! カラー用の参照テーブルを送るコマンドを保存する配列サイズです。 580 static const u32 PROCTEX_COLOR_LOOKUP_TABLE_CMD_NUM = PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM + PROCTEX_COLOR_LOOKUP_TABLE_OPTION_CMD_NUM; 581 582 /*! 583 @brief プロシージャルテクスチャの参照テーブルに関連した定数です。 584 */ 585 enum ProcedureTextureColorShift 586 { 587 //! 赤成分の値を左シフトするビット数です。 588 PROCTEX_RED_COLOR_SHIFT_NUM = 0, 589 //! 緑成分の値を左シフトするビット数です。 590 PROCTEX_GREEN_COLOR_SHIFT_NUM = 8, 591 //! 青成分の値を左シフトするビット数です。 592 PROCTEX_BLUE_COLOR_SHIFT_NUM = 16, 593 //! アルファ成分の値を左シフトするビット数です。 594 PROCTEX_ALPHA_COLOR_SHIFT_NUM = 24 595 }; 596 597 /*! 598 @brief ノイズの連続性関数の参照テーブルを描画コマンドの形に変換して保持します。 599 型は u32[] です。 600 */ 601 u32 m_NoiseLookUpTableCommand[ PROCTEX_LOOKUP_TABLE_CMD_NUM ]; 602 603 /*! 604 @brief RGB のマッピング関数の参照テーブルを描画コマンドの形に変換して保持します。 605 型は u32[] です。 606 */ 607 u32 m_RgbMapLookUpTableCommand[ PROCTEX_LOOKUP_TABLE_CMD_NUM ]; 608 609 /*! 610 @brief アルファのマッピング関数の参照テーブルを描画コマンドの形に変換して保持します。 611 型は u32[] です。 612 */ 613 u32 m_AlphaMapLookUpTableCommand[ PROCTEX_LOOKUP_TABLE_CMD_NUM ]; 614 615 /*! 616 @brief カラー参照テーブルを描画コマンドの形に変換して保持します。 617 型は u32[] です。 618 */ 619 u32 m_ColorLookUpTableCommand[ PROCTEX_COLOR_LOOKUP_TABLE_CMD_NUM ]; 620 621 /*! 622 @brief カラー参照テーブルの差分値を描画コマンドの形に変換して保持します。 623 型は u32[] です。 624 */ 625 u32 m_ColorDiffLookUpTableCommand[ PROCTEX_COLOR_LOOKUP_TABLE_CMD_NUM ]; 626 }; 627 628 } // namespace CTR 629 } // namespace gr 630 } //namespace nn 631 632 #endif // NN_GR_PROCEDURE_TEXTURE_H_ 633