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