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: 33699 $ 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 型は @ref PicaDataTexEnvCombine です。 48 値には PICA マクロヘッダの列挙型の名前が 49 @ref PicaDataTexEnvCombine の列挙定数を使って下さい。 50 初期値はPICA_DATA_TEX_ENV_COMBINE_REPLACEです。 51 */ 52 PicaDataTexEnvCombine combine; 53 54 /*! 55 @brief オペランドの設定です。 56 型は @ref PicaDataTexEnvOperand[] です。 57 値にはPICAマクロヘッダの列挙型の名前が 58 @ref PicaDataTexEnvOperand 59 の列挙定数を使って下さい。 60 カラーのオペランドは、デフォルトは PICA_DATA_OPE_RGB_SRC_COLOR です。 61 アルファのオペランドは、デフォルトは PICA_DATA_OPE_ALPHA_SRC_ALPHA です。 62 */ 63 PicaDataTexEnvOperand operand[3]; 64 65 /*! 66 @brief ソース0、ソース1、ソース2の設定です。 67 型は @ref PicaDataTexEnvSrc です。 68 値にはPICAマクロヘッダの列挙型の名前が 69 @ref PicaDataTexEnvSrc 70 の列挙定数を使って下さい。 71 ステージ0についての設定の場合、 72 デフォルトはPICA_DATA_TEX_ENV_SRC_RGBA_CONSTANTです。 73 ステージ0以外についての設定の場合は、 74 デフォルトはPICA_DATA_TEX_ENV_SRC_RGBA_PREVIOUSです。 75 */ 76 PicaDataTexEnvSrc source[3]; 77 78 /*! 79 @brief スケールの設定です。 80 型は @ref PicaDataTexEnvScale です。 81 値にはPICAマクロヘッダの列挙型の名前が 82 @ref PicaDataTexEnvScale 83 の列挙定数を使って下さい。 84 デフォルトはPICA_DATA_TEX_ENV_SCALE_1です。 85 */ 86 PicaDataTexEnvScale scale; 87 88 /*! 89 @brief コンバイナバッファのソースの設定です。 90 型は @ref PicaDataTexEnvBufferInput です。 91 値にはPICAマクロヘッダの列挙型の名前が 92 @ref PicaDataTexEnvBufferInput 93 の列挙定数を使って下さい。 94 デフォルトはPICA_DATA_TEX_ENV_BUFFER_INPUT_PREVIOUS_BUFFER_DMPです。 95 */ 96 PicaDataTexEnvBufferInput bufferInput; 97 98 /*! 99 @brief コンバイン関数の設定について、初期値を設定します。 100 101 @param[in] stage_index コンバイン関数が使われるステージのインデックスです。 102 @param[in] is_rgb コンバイン関数がカラーが対象であればtrue、アルファが対象であればfalseです。 103 */ 104 explicit CombineFunction( const u8 stage_index, bool is_rgb ); 105 106 protected : 107 /*! 108 @brief Stage クラスを friend に設定しています。 109 */ 110 friend class Stage; 111 112 /*! 113 @brief デフォルトコンストラクタを呼べるのは、Stageクラスのみです。 114 */ CombineFunctionCombineFunction115 explicit CombineFunction(){}; 116 }; 117 118 /*! 119 @brief カラーについてのコンバイン関数です。 120 型は nn::gr::CTR::Combiner::Stage::CombineFunction です。 121 */ 122 CombineFunction rgb; 123 124 /*! 125 @brief アルファについてのコンバイン関数です。 126 型は nn::gr::CTR::Combiner::Stage::CombineFunction です。 127 */ 128 CombineFunction alpha; 129 130 /*! 131 @brief コンスタントカラーの赤成分です。 132 型は u8 です。 133 */ 134 u8 constColorR; 135 136 /*! 137 @brief コンスタントカラーの青成分です。 138 型は u8 です。 139 */ 140 u8 constColorG; 141 142 /*! 143 @brief コンスタントカラーの緑成分です。 144 型は u8 です。 145 */ 146 u8 constColorB; 147 148 /*! 149 @brief コンスタントカラーのアルファ成分です。 150 型は u8 です。 151 */ 152 u8 constColorA; 153 154 /*! 155 @brief 設定するステージの先頭レジスタを設定します。 156 型は @ref PicaReg です。 157 */ 158 /* 159 値は、PICA_REG_TEX_ENV0、 160 PICA_REG_TEX_ENV1、 161 PICA_REG_TEX_ENV2、 162 PICA_REG_TEX_ENV3、 163 PICA_REG_TEX_ENV4、 164 PICA_REG_TEX_ENV5 165 のいずれかを設定します。 166 */ 167 PicaReg headRegister; 168 169 public : 170 /*! 171 @brief PRIMARY_COLORで置き換える設定にします。 172 */ 173 void SetupPrimary( void ); 174 175 /*! 176 @brief FRAGMENT_PRIMARY_COLORで置き換える設定にします. 177 */ 178 void SetupFragmentPrimary( void ); 179 180 /*! 181 @brief TEXTURE0で置き換える設定にします。 182 */ 183 void SetupTexture0( void ); 184 185 /*! 186 @brief 前ステージの色でスルーする設定にします。 187 */ 188 void SetupPrevious( void ); 189 190 /*! 191 @brief PRIMARY_COLORとTEXTURE0との乗算の設定にします。 192 */ 193 void SetupPrimaryModulateTexture0( void ); 194 195 /*! 196 @brief FRAGMENT_PRIMARY_COLORとTEXTURE0との乗算の設定にします。 197 */ 198 void SetupFragmentPrimaryModulateTexture0( void ); 199 200 /*! 201 @brief ステージの初期値を設定します。 202 203 @param[in] stage_index コンバイナステージインデックスです(値は、0-5 です) 204 */ 205 explicit Stage( const int stage_index ); 206 207 /*! 208 @brief 設定された情報をもとに、コンバイナステージの設定コマンドを生成します。 209 コンバイナバッファについてのコマンドは含まれませんので、注意して下さい。 210 211 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 212 213 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 214 @see Combiner::MakeCombinerBufferCommand() 215 */ 216 bit32* MakeCommand( bit32* command ) const; 217 218 219 protected : 220 /*! 221 @brief デフォルトコンストラクタを呼べるのは、Combinerクラスのみです。 222 */ 223 friend class Combiner; 224 225 /*! 226 @brief デフォルトコンストラクタを呼べるのは、Combinerクラスのみです。 227 */ Stage(void)228 explicit Stage( void ) 229 { 230 }; 231 }; 232 233 public : 234 //! コンバイナは 6 つのステージから構成されます。 235 static const u32 COMBINER_STAGE_MAX = 6; 236 237 /*! 238 @brief 各ステージのコンバイナ設定を保持します。 239 型は nn::gr::CTR::Combiner::Stage [] で、 240 配列のサイズは @ref COMBINER_STAGE_MAX です。 241 各コンバイナのステージのコマンドを個別に生成したい場合は、 242 Stage::MakeCommand() を利用して下さい。 243 */ 244 Stage stage[ COMBINER_STAGE_MAX ]; 245 246 public : 247 /*! 248 @brief 先頭ステージのコンバイナバッファの出力の赤成分です。 249 型は u8 です。 250 */ 251 u8 bufferColorR; 252 253 /*! 254 @brief 先頭ステージのコンバイナバッファの出力の緑成分です。 255 型は u8 です。 256 */ 257 u8 bufferColorG; 258 259 /*! 260 @brief 先頭ステージのコンバイナバッファの出力の青成分です。 261 型は u8 です。 262 */ 263 u8 bufferColorB; 264 265 /*! 266 @brief 先頭ステージのコンバイナバッファの出力のアルファ成分です。 267 型は u8 です。 268 */ 269 u8 bufferColorA; 270 271 /*! 272 @brief 各ステージの初期値を設定します。 273 */ 274 explicit Combiner(); 275 276 /*! 277 @brief 設定された情報をもとに、すべてのコンバイナステージの設定コマンドを生成します。 278 コンバイナバッファのコマンドも同時に生成されます。 279 280 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 281 282 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 283 284 @see MakeBufferInputCommand() 285 */ 286 bit32* MakeCommand( bit32* command ) const; 287 288 289 /*! 290 @brief 設定された情報をもとに、コンバイナバッファの設定コマンドを生成します。 291 292 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 293 294 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 295 */ 296 bit32* MakeCombinerBufferCommand( bit32* command ) const; 297 }; 298 299 } // namespace CTR 300 } // namespace gr 301 } // namespace nn 302 303 #endif // NN_GR_COMBINER_H_ 304