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: 33699 $ 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 @param[in] lastDiffValue 参照データの最後の差分値です。 173 */ 174 void SetNoiseLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 175 const u32 lookUpTableIndex = 0, 176 const f32 lastDiffValue = 0.0f ); 177 178 /*! 179 @brief ノイズの連続性関数の参照テーブルを設定します。 180 181 @param[in] lookUpTable 128個の参照データです。 182 @param[in] diffLookUpTable 128個の参照データの差分値です。 183 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 184 */ 185 void SetNoiseLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 186 const f32 diffLookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 187 const u32 lookUpTableIndex = 0 ); 188 189 /*! 190 @brief RGB のマッピング関数の参照テーブルを設定します。 191 192 @param[in] lookUpTable 128個の参照データです。 193 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 194 @param[in] lastDiffValue 参照データの最後の差分値です。 195 */ 196 void SetRgbMapLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 197 const u32 lookUpTableIndex = 0, 198 const f32 lastDiffValue = 0.0f ); 199 200 /*! 201 @brief RGB のマッピング関数の参照テーブルを設定します。 202 203 @param[in] lookUpTable 128個の参照データです。 204 @param[in] diffLookUpTable 128個の参照データの差分値です。 205 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 206 */ 207 void SetRgbMapLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 208 const f32 diffLookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 209 const u32 lookUpTableIndex = 0 ); 210 211 /*! 212 @brief アルファのマッピング関数の参照テーブルを設定します。 213 214 @param[in] lookUpTable 128個の参照データです。 215 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 216 @param[in] lastDiffValue 参照データの最後の差分値です。 217 */ 218 void SetAlphaMapLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 219 const u32 lookUpTableIndex = 0, 220 const f32 lastDiffValue = 0.0f ); 221 222 /*! 223 @brief アルファのマッピング関数の参照テーブルを設定します。 224 225 @param[in] lookUpTable 128個の参照データです。 226 @param[in] diffLookUpTable 128個の参照データの差分値です。 227 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 228 */ 229 void SetAlphaMapLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 230 const f32 diffLookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 231 const u32 lookUpTableIndex = 0 ); 232 233 /*! 234 @brief 赤成分のカラー参照テーブルを設定します。 235 236 @param[in] lookUpTable 赤成分の256個の参照データです。 237 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 238 */ 239 void SetRedLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 240 const u32 lookUpTableIndex = 0 ); 241 242 /*! 243 @brief 赤成分のカラー参照テーブルを設定します。 244 245 @param[in] lookUpTable 赤成分の256個の参照データです。 246 @param[in] lookUpDiffTable 赤成分の256個の参照データの差分値です。 247 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 248 @param[in] diffLookUpTableIndex 参照テーブルの差分値のインデックスです。 249 */ 250 void SetRedLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 251 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 252 const u32 lookUpTableIndex = 0, 253 const u32 diffLookUpTableIndex = 0 ); 254 255 /*! 256 @brief 緑成分のカラー参照テーブルを設定します。 257 258 @param[in] lookUpTable 緑成分の256個の参照データです。 259 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 260 */ 261 void SetGreenLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 262 const u32 lookUpTableIndex = 0 ); 263 264 /*! 265 @brief 緑成分のカラー参照テーブルを設定します。 266 267 @param[in] lookUpTable 緑成分の256個の参照データです。 268 @param[in] lookUpDiffTable 緑成分の256個の参照データの差分値です。 269 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 270 @param[in] diffLookUpTableIndex 参照テーブルの差分値のインデックスです。 271 */ 272 void SetGreenLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 273 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 274 const u32 lookUpTableIndex = 0, 275 const u32 diffLookUpTableIndex = 0 ); 276 277 /*! 278 @brief 青成分のカラー参照テーブルを設定します。 279 280 @param[in] lookUpTable 青成分の256個の参照データです。 281 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 282 */ 283 void SetBlueLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 284 const u32 lookUpTableIndex = 0 ); 285 286 /*! 287 @brief 青成分のカラー参照テーブルを設定します。 288 289 @param[in] lookUpTable 青成分の256個の参照データです。 290 @param[in] lookUpDiffTable 青成分の256個の参照データの差分値です。 291 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 292 @param[in] diffLookUpTableIndex 参照テーブルの差分値のインデックスです。 293 */ 294 void SetBlueLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 295 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 296 const u32 lookUpTableIndex = 0, 297 const u32 diffLookUpTableIndex = 0 ); 298 299 /*! 300 @brief アルファ成分のカラー参照テーブルを設定します。 301 302 @param[in] lookUpTable アルファ成分の256個の参照データです。 303 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 304 */ 305 void SetAlphaLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 306 const u32 lookUpTableIndex = 0 ); 307 308 /*! 309 @brief アルファ成分のカラー参照テーブルを設定します。 310 311 @param[in] lookUpTable アルファ成分の256個の参照データです。 312 @param[in] lookUpDiffTable アルファ成分の256個の参照データの差分値です。 313 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 314 @param[in] diffLookUpTableIndex 参照テーブルの差分値のインデックスです。 315 */ 316 void SetAlphaLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 317 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 318 const u32 lookUpTableIndex = 0, 319 const u32 diffLookUpTableIndex = 0 ); 320 321 /*! 322 @brief プロシージャルテクスチャのレジスタを設定する全てのコマンドを生成します。 323 324 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 325 @param[in] isAddDummyCommand 0x80 へのダミー書き込みコマンドを 3回 生成します。 326 327 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 328 */ 329 bit32* MakeAllCommand( bit32* command, bool isAddDummyCommand = true ) const 330 { 331 // 設定用コマンド 332 command = MakeConfigCommand( command, isAddDummyCommand ); 333 334 // プロシージャルテクスチャの参照テーブルのコマンド 335 command = MakeTableCommand( command ); 336 337 return command; 338 } 339 340 /*! 341 @brief プロシージャルテクスチャの全ての設定のコマンドを生成します。(参照テーブルのコマンドは生成しません。) 342 343 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 344 @param[in] isAddDummyCommand レジスタの変更前に、0x80 へのダミー書き込みコマンドを 3回 生成します。 345 346 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 347 */ 348 bit32* MakeConfigCommand( bit32* command, bool isAddDummyCommand = true ) const 349 { 350 command = MakeProcedureTextureModeCommand( command, isAddDummyCommand ); 351 command = MakeTextureCommand( command, false, false ); 352 command = MakeNoiseCommand( command, false, false ); 353 354 return command; 355 } 356 357 /*! 358 @brief プロシージャルテクスチャのモード設定用のコマンドだけを生成します。 359 360 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 361 @param[in] isAddDummyCommand レジスタの変更前に、0x80 へのダミー書き込みコマンドを 3回 生成します。 362 363 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 364 */ 365 bit32* MakeProcedureTextureModeCommand( bit32* command, bool isAddDummyCommand = true ) const 366 { 367 if ( isAddDummyCommand ) 368 { 369 command = MakeDummyCommand( command ); 370 } 371 372 // f32 -> f16 373 u16 texBiasFloat16 = Float32ToFloat16( texBias ); 374 u8 texBiasFloat16Low8 = ( texBiasFloat16 & 0xFF ); 375 376 // 0x0a8 377 *command++ = PICA_CMD_DATA_PROCTEX0( clampU, clampV, 378 rgbMap, alphaMap, 379 ( alphaSeparate ? 1 : 0), 380 ( isEnableNoise ? 1 : 0 ), 381 shiftU, shiftV, 382 texBiasFloat16Low8 ); 383 *command++ = PICA_CMD_HEADER_SINGLE( PICA_REG_TEXTURE3_PROCTEX0 ); 384 385 return command; 386 } 387 388 /*! 389 @brief プロシージャルテクスチャのテクスチャ設定用のコマンドだけを生成します。 390 391 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 392 @param[in] isAddProcedureTextureModeCommand テクスチャに関連した texBias, clampU, clampV, shiftU, shiftV のいずれかのコマンドを生成したいときに true にします。 393 @param[in] isAddDummyCommand レジスタの変更前に、0x80 へのダミー書き込みコマンドを 3回 生成します。 394 395 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 396 */ 397 bit32* MakeTextureCommand( bit32* command, bool isAddProcedureTextureModeCommand = true, bool isAddDummyCommand = true ) const 398 { 399 if ( isAddProcedureTextureModeCommand ) 400 { 401 command = MakeProcedureTextureModeCommand( command, isAddDummyCommand ); 402 } 403 else if ( isAddDummyCommand ) 404 { 405 command = MakeDummyCommand( command ); 406 } 407 408 // f32 -> f16 409 u16 texBiasFloat16 = Float32ToFloat16( texBias ); 410 u8 texBiasFloat16Hi8 = ( ( texBiasFloat16 >> 8 ) & 0xFF ); 411 412 // 0x0ac 413 *command++ = PICA_CMD_DATA_PROCTEX4( minFilter, texWidth, texBiasFloat16Hi8 ); 414 *command++ = PICA_CMD_HEADER_BURSTSEQ( PICA_REG_TEXTURE3_PROCTEX4, 0x2 ); 415 416 // 0x0ad 417 *command++ = PICA_CMD_DATA_PROCTEX5( texOffset ); 418 // padding 419 *command++ = 0x0; 420 421 return command; 422 } 423 424 /*! 425 @brief プロシージャルテクスチャのノイズ設定用のコマンドだけを生成します。 426 427 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 428 @param[in] isAddProcedureTextureModeCommand ノイズに関連した isEnableNoise, rgbMap, alphaMap のいずれかのコマンドを生成したいときに true にします。 429 @param[in] isAddDummyCommand レジスタの変更前に、0x80 へのダミー書き込みコマンドを 3回 生成します。 430 431 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 432 */ 433 bit32* MakeNoiseCommand( bit32* command, bool isAddProcedureTextureModeCommand = true, bool isAddDummyCommand = true ) const 434 { 435 if ( isAddProcedureTextureModeCommand ) 436 { 437 command = MakeProcedureTextureModeCommand( command, isAddDummyCommand ); 438 } 439 else if ( isAddDummyCommand ) 440 { 441 command = MakeDummyCommand( command ); 442 } 443 444 // 0x0a9 445 *command++ = PICA_CMD_DATA_PROCTEX1( Float32ToFloat16( noiseUPhase ), 446 Float32ToFix16( noiseUAmplitude ) ); 447 *command++ = PICA_CMD_HEADER_BURSTSEQ( PICA_REG_TEXTURE3_PROCTEX1, 0x3 ); 448 449 // 0x0aa 450 *command++ = PICA_CMD_DATA_PROCTEX2( Float32ToFloat16( noiseVPhase ), 451 Float32ToFix16( noiseVAmplitude ) ); 452 // 0x0ab 453 *command++ = PICA_CMD_DATA_PROCTEX3( Float32ToFloat16( noiseUFrequency ), 454 Float32ToFloat16( noiseVFrequency ) ); 455 456 return command; 457 } 458 459 /*! 460 @brief プロシージャルテクスチャを参照テーブルのコマンドを生成します。 461 462 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 463 464 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 465 */ 466 bit32* MakeTableCommand( bit32* command ) const; 467 468 469 /*! 470 @brief プロシージャルテクスチャのレジスタを更新する前に必要な 0x80 へのダミーコマンドを生成します。 471 472 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 473 474 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 475 */ MakeDummyCommand(bit32 * command)476 static bit32* MakeDummyCommand( bit32* command ) 477 { 478 *command++ = 0x0; 479 *command++ = PICA_CMD_HEADER_BURST_BE( PICA_REG_TEXTURE_FUNC, 0x3, 0x0 ); 480 481 *command++ = 0x0; 482 *command++ = 0x0; 483 484 return command; 485 } 486 487 public : 488 /*! 489 @brief プロシージャルテクスチャのコマンドを生成するクラスのコンストラクタです。 490 */ ProcedureTexture()491 ProcedureTexture() : 492 rgbMap( PICA_DATA_PROCTEX_U_DMP ), 493 alphaMap( PICA_DATA_PROCTEX_U_DMP ), 494 alphaSeparate( false ), 495 clampU( PICA_DATA_PROCTEX_CLAMP_TO_EDGE ), clampV( PICA_DATA_PROCTEX_CLAMP_TO_EDGE ), 496 shiftU( PICA_DATA_PROCTEX_NONE_DMP ), shiftV( PICA_DATA_PROCTEX_NONE_DMP ), 497 minFilter( PICA_DATA_PROCTEX_LINEAR ), 498 texBias( 0.5f ), texOffset( 0 ), texWidth( 0 ), 499 isEnableNoise( false ), 500 noiseUAmplitude( 0.0f ), noiseVAmplitude( 0.0f ), 501 noiseUFrequency( 0.0f ), noiseVFrequency( 0.0f ), 502 noiseUPhase( 0.0f ), noiseVPhase( 0.0f ) 503 { 504 } 505 506 protected: 507 /*! 508 @brief 描画コマンドの配列に、参照テーブルのコマンドを設定します。 509 510 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 511 @param[in] procTexLookUpTable 参照テーブルの種類です。 512 @param[in] lookUpTable 128個の参照テーブルです。 513 @param[in] diffLookUptable 128個の参照テーブルです。 514 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 515 */ 516 void SetLookUpDualTables_( bit32* command, 517 PicaDataProcTexRefTable procTexLookUpTable, 518 const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 519 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 520 const u32 lookUpTableIndex = 0 ); 521 522 /*! 523 @brief 描画コマンドの配列に、カラー用の参照テーブルと差分テーブルのコマンドを設定します。 524 525 @param[in] colorShiftNum 色成分の値を左シフトするビット数です。 526 @param[in] lookUpTable 参照テーブルです。 527 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 528 */ 529 void SetColorLookUpDualTables_( const u32 colorShiftNum, 530 const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 531 const u32 lookUpTableIndex = 0 ); 532 533 /*! 534 @brief 描画コマンドの配列に、カラーの参照テーブルのコマンドを設定します。 535 536 @param[in] colorShiftNum 色成分をコマンドに代入するときに、左シフトする回数です。 537 @param[in] lookUpTable 参照テーブルです。 538 @param[in] lookUpTableIndex 参照テーブルのインデックスです。 539 */ 540 void SetColorLookUpTable_( const u32 colorShiftNum, 541 const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 542 const u32 lookUpTableIndex = 0 ); 543 544 /*! 545 @brief 描画コマンドの配列に、参照テーブルの差分値のコマンドを設定します。 546 547 @param[in] colorShiftNum 色成分をコマンドに代入するときに、左シフトする回数です。 548 @param[in] diffLookUpTable 参照テーブルの差分値です。 549 @param[in] diffLookUpTableIndex 参照テーブルのインデックスです。 550 */ 551 void SetColorDiffLookUpTable_( const u32 colorShiftNum, 552 const f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 553 const u32 diffLookUpTableIndex = 0 ); 554 555 /*! 556 @brief 256個の参照テーブルの差分値を求めます。 557 558 @param[in] lookUpTable 256個の参照テーブルです。 559 @param[out] diffLookUpTable 256個の参照テーブルの差分値です。 560 */ 561 void GetColorDiffLookUpTable( const f32 lookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ], 562 f32 diffLookUpTable[ PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM ] ); 563 564 /*! 565 @brief 128個の参照テーブルの差分値を求めます。 566 567 @param[in] lookUpTable 128個の参照テーブルです。 568 @param[out] diffLookUpTable 128個の参照テーブルの差分値です。 569 @param[in] lastDiffValue 参照データの最後の差分値です。 570 */ 571 void GetDiffLookUpTable( const f32 lookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 572 f32 diffLookUpTable[ PROCTEX_LOOKUP_TABLE_ELEMENT_NUM ], 573 const f32 lastDiffValue = 0.0f ); 574 575 protected : 576 //! 参照テーブルを送るために追加するコマンドのサイズです。 577 static const u32 PROCTEX_LOOKUP_TABLE_OPTION_CMD_NUM = 4; 578 579 //! 参照テーブルを送るコマンドを保存する配列サイズです。 580 static const u32 PROCTEX_LOOKUP_TABLE_CMD_NUM = PROCTEX_LOOKUP_TABLE_ELEMENT_NUM + PROCTEX_LOOKUP_TABLE_OPTION_CMD_NUM; 581 582 //! カラー用の参照テーブルを送るために追加するコマンドのサイズです。 583 static const u32 PROCTEX_COLOR_LOOKUP_TABLE_OPTION_CMD_NUM = 6; 584 585 //! カラー用の参照テーブルを送るコマンドを保存する配列サイズです。 586 static const u32 PROCTEX_COLOR_LOOKUP_TABLE_CMD_NUM = PROCTEX_COLOR_LOOKUP_TABLE_ELEMENT_NUM + PROCTEX_COLOR_LOOKUP_TABLE_OPTION_CMD_NUM; 587 588 /*! 589 @brief プロシージャルテクスチャの参照テーブルに関連した定数です。 590 */ 591 enum ProcedureTextureColorShift 592 { 593 //! 赤成分の値を左シフトするビット数です。 594 PROCTEX_RED_COLOR_SHIFT_NUM = 0, 595 //! 緑成分の値を左シフトするビット数です。 596 PROCTEX_GREEN_COLOR_SHIFT_NUM = 8, 597 //! 青成分の値を左シフトするビット数です。 598 PROCTEX_BLUE_COLOR_SHIFT_NUM = 16, 599 //! アルファ成分の値を左シフトするビット数です。 600 PROCTEX_ALPHA_COLOR_SHIFT_NUM = 24 601 }; 602 603 /*! 604 @brief ノイズの連続性関数の参照テーブルを描画コマンドの形に変換して保持します。 605 型は u32[] です。 606 */ 607 u32 m_NoiseLookUpTableCommand[ PROCTEX_LOOKUP_TABLE_CMD_NUM ]; 608 609 /*! 610 @brief RGB のマッピング関数の参照テーブルを描画コマンドの形に変換して保持します。 611 型は u32[] です。 612 */ 613 u32 m_RgbMapLookUpTableCommand[ PROCTEX_LOOKUP_TABLE_CMD_NUM ]; 614 615 /*! 616 @brief アルファのマッピング関数の参照テーブルを描画コマンドの形に変換して保持します。 617 型は u32[] です。 618 */ 619 u32 m_AlphaMapLookUpTableCommand[ PROCTEX_LOOKUP_TABLE_CMD_NUM ]; 620 621 /*! 622 @brief カラー参照テーブルを描画コマンドの形に変換して保持します。 623 型は u32[] です。 624 */ 625 u32 m_ColorLookUpTableCommand[ PROCTEX_COLOR_LOOKUP_TABLE_CMD_NUM ]; 626 627 /*! 628 @brief カラー参照テーブルの差分値を描画コマンドの形に変換して保持します。 629 型は u32[] です。 630 */ 631 u32 m_ColorDiffLookUpTableCommand[ PROCTEX_COLOR_LOOKUP_TABLE_CMD_NUM ]; 632 }; 633 634 } // namespace CTR 635 } // namespace gr 636 } //namespace nn 637 638 #endif // NN_GR_PROCEDURE_TEXTURE_H_ 639