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