1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gr_Combiner.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: 26256 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_GR_COMBINER_H_ 17 #define NN_GR_COMBINER_H_ 18 19 #include <nn/gr/CTR/gr_Prefix.h> 20 21 namespace nn 22 { 23 namespace gr 24 { 25 namespace CTR 26 { 27 28 /*! 29 @brief コンバイナ設定のためのクラスです。 30 */ 31 class Combiner 32 { 33 public : 34 /*! 35 @brief コンバイナのステージ設定のためのクラスです。 36 */ 37 class Stage 38 { 39 public : 40 /*! 41 @brief コンバイン関数の入出力設定をあらわす構造体です。 42 */ 43 struct CombineFunction 44 { 45 /*! 46 @brief コンバイン関数の設定です。 47 型は PicaDataTexEnvCombine です。 48 値には PICA マクロヘッダの列挙型の名前が 49 PicaDataTexEnvCombine の列挙定数を使って下さい。 50 初期値はPICA_DATA_TEX_ENV_COMBINE_REPLACEです。 51 */ 52 /* 53 値は、 54 PICA_DATA_TEX_ENV_COMBINE_REPLACE、 55 PICA_DATA_TEX_ENV_COMBINE_MODULATE、 56 PICA_DATA_TEX_ENV_COMBINE_ADD、 57 PICA_DATA_TEX_ENV_COMBINE_ADD_SIGNED、 58 PICA_DATA_TEX_ENV_COMBINE_INTERPOLATE、 59 PICA_DATA_TEX_ENV_COMBINE_SUBTRACT、 60 PICA_DATA_TEX_ENV_COMBINE_DOT3_RGB、 61 PICA_DATA_TEX_ENV_COMBINE_DOT3_RGBA、 62 PICA_DATA_TEX_ENV_COMBINE_MULT_ADD_DMP、 63 PICA_DATA_TEX_ENV_COMBINE_ADD_MULT_DMP 64 のいずれかです。 65 */ 66 PicaDataTexEnvCombine combine; 67 68 /*! 69 @brief オペランドの設定です。 70 型は PicaDataTexEnvOperand[] です。 71 値にはPICAマクロヘッダの列挙型の名前が 72 PicaDataTexEnvOperand 73 の列挙定数を使って下さい。 74 カラーのオペランドは、デフォルトはPICA_DATA_OPE_RGB_SRC_COLORです。 75 */ 76 /* 77 カラーのオペランドには、 78 PICA_DATA_OPE_RGB_SRC_COLOR、 79 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_COLOR、 80 PICA_DATA_OPE_RGB_SRC_ALPHA、 81 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_ALPHA、 82 PICA_DATA_OPE_RGB_SRC_R_DMP、 83 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_R_DMP、 84 PICA_DATA_OPE_RGB_SRC_G_DMP、 85 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_G_DMP、 86 PICA_DATA_OPE_RGB_SRC_B_DMP、 87 PICA_DATA_OPE_RGB_ONE_MINUS_SRC_B_DMP 88 のいずれかを設定します。 89 デフォルトはPICA_DATA_OPE_RGB_SRC_COLORです。 90 アルファのオペランドには、 91 PICA_DATA_OPE_ALPHA_SRC_ALPHA、 92 PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_ALPHA、 93 PICA_DATA_OPE_ALPHA_SRC_R_DMP、 94 PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_R_DMP、 95 PICA_DATA_OPE_ALPHA_SRC_G_DMP、 96 PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_G_DMP、 97 PICA_DATA_OPE_ALPHA_SRC_B_DMP、 98 PICA_DATA_OPE_ALPHA_ONE_MINUS_SRC_B_DMP 99 のいずれかを設定します。 100 デフォルトはPICA_DATA_OPE_ALPHA_SRC_ALPHAです。 101 */ 102 PicaDataTexEnvOperand operand[3]; 103 104 /*! 105 @brief ソース0、ソース1、ソース2の設定です。 106 型は PicaDataTexEnvSrc です。 107 値にはPICAマクロヘッダの列挙型の名前が 108 PicaDataTexEnvSrc 109 の列挙定数を使って下さい。 110 ステージ0についての設定の場合、 111 デフォルトはPICA_DATA_TEX_ENV_SRC_RGBA_CONSTANTです。 112 ステージ0以外についての設定の場合は、デフォルトはPICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUSです。 113 */ 114 /* 115 ステージ0についての設定の場合、 116 PICA_DATA_TEX_ENV_SRC_RGBA_PRIMARY_COLOR、 117 PICA_DATA_TEX_ENV_SRC_RGBA_FRAGMENT_PRIMARY_COLOR_DMP、 118 PICA_DATA_TEX_ENV_SRC_RGBA_FRAGMENT_SECONDARY_COLOR_DMP、 119 PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE0、 120 PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE1、 121 PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE2、 122 PICA_DATA_TEX_ENV_SRC_RGBA_TEXTURE3、 123 PICA_DATA_TEX_ENV_SRC_RGBA_CONSTANT 124 のいずれかを設定します。 125 デフォルトはPICA_DATA_TEX_ENV_SRC_RGBA_CONSTANTです。 126 ステージ0以外についての設定の場合は、上記に加えて、 127 PICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUS, 128 PICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUS_BUFFER_DMP 129 を設定できます。また、source[3]のうちのいずれかが、 130 これら2つのどちらかである必要があります。 131 デフォルトはPICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUSです。 132 */ 133 PicaDataTexEnvSrc source[3]; 134 135 /*! 136 @brief スケールの設定です。 137 型は PicaDataTexEnvScale です。 138 値にはPICAマクロヘッダの列挙型の名前が 139 PicaDataTexEnvScale 140 の列挙定数を使って下さい。 141 デフォルトはPICA_DATA_TEX_ENV_SCALE_1です。 142 */ 143 /* 144 値は、PICA_DATA_TEX_ENV_SCALE_1、 145 PICA_DATA_TEX_ENV_SCALE_2、 146 PICA_DATA_TEX_ENV_SCALE_4 147 のいずれかを設定します。 148 */ 149 PicaDataTexEnvScale scale; 150 151 /*! 152 @brief コンバイナバッファのソースの設定です。 153 型は nn::gr::CTR::PicaDataTexEnvBufferInput です。 154 値にはPICAマクロヘッダの列挙型の名前が 155 PicaDataTexEnvBufferInput 156 の列挙定数を使って下さい。 157 デフォルトはPICA_DATA_TEX_ENV_BUFFER_INPUT_PREVIOUS_BUFFER_DMPです。 158 */ 159 /* 160 PICA_DATA_TEX_ENV_BUFFER_INPUT_PREVIOUS_BUFFER_DMP、 161 PICA_DATA_TEX_ENV_BUFFER_INPUT_PREVIOUS 162 のいずれかを設定します。 163 */ 164 PicaDataTexEnvBufferInput bufferInput; 165 166 /*! 167 @brief コンバイン関数の設定について、初期値を設定します。 168 169 @param[in] stage_index コンバイン関数が使われるステージのインデックスです。 170 @param[in] is_rgb コンバイン関数がカラーが対象であればtrue、アルファが対象であればfalseです。 171 */ 172 explicit CombineFunction( const u8 stage_index, bool is_rgb ); 173 174 private : 175 /*! 176 @brief Stage クラスを friend に設定しています。 177 */ 178 friend class Stage; 179 180 /*! 181 @brief デフォルトコンストラクタを呼べるのは、Stageクラスのみです。 182 */ CombineFunctionCombineFunction183 explicit CombineFunction(){}; 184 }; 185 186 /*! 187 @brief カラーについてのコンバイン関数です。 188 型は nn::gr::CTR::Combiner::Stage::CombineFunction です。 189 */ 190 CombineFunction rgb; 191 192 /*! 193 @brief アルファについてのコンバイン関数です。 194 型は nn::gr::CTR::Combiner::Stage::CombineFunction です。 195 */ 196 CombineFunction alpha; 197 198 /*! 199 @brief コンスタントカラーの赤成分です。 200 型は u8 です。 201 */ 202 u8 constColorR; 203 204 /*! 205 @brief コンスタントカラーの青成分です。 206 型は u8 です。 207 */ 208 u8 constColorG; 209 210 /*! 211 @brief コンスタントカラーの緑成分です。 212 型は u8 です。 213 */ 214 u8 constColorB; 215 216 /*! 217 @brief コンスタントカラーのアルファ成分です。 218 型は u8 です。 219 */ 220 u8 constColorA; 221 222 /*! 223 @brief 設定するステージの先頭レジスタを設定します。 224 型は PicaReg です。 225 */ 226 /* 227 値は、PICA_REG_TEX_ENV0、 228 PICA_REG_TEX_ENV1、 229 PICA_REG_TEX_ENV2、 230 PICA_REG_TEX_ENV3、 231 PICA_REG_TEX_ENV4、 232 PICA_REG_TEX_ENV5 233 のいずれかを設定します。 234 */ 235 PicaReg headRegister; 236 237 public : 238 /*! 239 @brief PRIMARY_COLORで置き換える設定にします。 240 */ 241 void SetupPrimary( void ); 242 243 /*! 244 @brief FRAGMENT_PRIMARY_COLORで置き換える設定にします. 245 */ 246 void SetupFragmentPrimary( void ); 247 248 /*! 249 @brief TEXTURE0で置き換える設定にします。 250 */ 251 void SetupTexture0( void ); 252 253 /*! 254 @brief 前ステージの色でスルーする設定にします。 255 */ 256 void SetupPrevious( void ); 257 258 /*! 259 @brief PRIMARY_COLORとTEXTURE0との乗算の設定にします。 260 */ 261 void SetupPrimaryModulateTexture0( void ); 262 263 /*! 264 @brief FRAGMENT_PRIMARY_COLORとTEXTURE0との乗算の設定にします。 265 */ 266 void SetupFragmentPrimaryModulateTexture0( void ); 267 268 /*! 269 @brief ステージの初期値を設定します。 270 271 @param[in] stage_index コンバイナステージインデックスです(値は、0 から6 です) 272 */ 273 explicit Stage( const int stage_index ); 274 275 /*! 276 @brief 設定された情報をもとに、コンバイナステージの設定コマンドを生成します。 277 コンバイナバッファについてのコマンドは含まれませんので、注意して下さい。 278 279 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 280 281 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 282 @see Combiner::MakeCombinerBufferCommand() 283 */ 284 u32* MakeCommand( u32* command ) const; 285 286 287 private : 288 /*! 289 @brief デフォルトコンストラクタを呼べるのは、Combinerクラスのみです。 290 */ 291 friend class Combiner; 292 293 /*! 294 @brief デフォルトコンストラクタを呼べるのは、Combinerクラスのみです。 295 */ Stage(void)296 explicit Stage( void ) 297 { 298 }; 299 }; 300 301 public : 302 enum 303 { 304 //! コンバイナは 6 つのステージから構成されます。 305 COMBINER_STAGE_MAX = 6 306 }; 307 308 /*! 309 @brief 各ステージのコンバイナ設定を保持します。 310 型は nn::gr::CTR::Combiner::Stage です。 311 */ 312 Stage stage[ COMBINER_STAGE_MAX ]; 313 314 public : 315 /*! 316 @brief 先頭ステージのコンバイナバッファの出力の赤成分です。 317 型は u8 です。 318 */ 319 u8 bufferColorR; 320 321 /*! 322 @brief 先頭ステージのコンバイナバッファの出力の緑成分です。 323 型は u8 です。 324 */ 325 u8 bufferColorG; 326 327 /*! 328 @brief 先頭ステージのコンバイナバッファの出力の青成分です。 329 型は u8 です。 330 */ 331 u8 bufferColorB; 332 333 /*! 334 @brief 先頭ステージのコンバイナバッファの出力のアルファ成分です。 335 型は u8 です。 336 */ 337 u8 bufferColorA; 338 339 /*! 340 @brief 各ステージの初期値を設定します。 341 */ 342 explicit Combiner(); 343 344 /*! 345 @brief 設定された情報をもとに、すべてのコンバイナステージの設定コマンドを生成します。 346 コンバイナバッファのコマンドも同時に生成されます。 347 348 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 349 350 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 351 352 @see MakeBufferInputCommand() 353 */ 354 u32* MakeCommand( u32* command ) const; 355 356 357 /*! 358 @brief 設定された情報をもとに、コンバイナバッファの設定コマンドを生成します。 359 360 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 361 362 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 363 */ 364 u32* MakeCombinerBufferCommand( u32* command ) const; 365 }; 366 367 } // namespace CTR 368 } // namespace gr 369 } // namespace nn 370 371 #endif // NN_GR_COMBINER_H_ 372