1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gr_Texture.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: 28648 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_GR_TEXTURE_H_ 17 #define NN_GR_TEXTURE_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 Texture 32 { 33 public : 34 35 /*! 36 @brief 各テクスチャユニットの共通設定のためのクラスです。 37 */ 38 class UnitBase 39 { 40 public : 41 /*! 42 @brief テクスチャの物理アドレスの設定です。型は uptr です。 43 */ 44 uptr physicalAddr; 45 46 47 /*! 48 @brief テクスチャの幅の設定です。型は u16 です。 49 */ 50 u16 width; 51 52 53 /*! 54 @brief テクスチャの高さの設定です。型は u16 です。 55 */ 56 u16 height; 57 58 /*! 59 @brief テクスチャのフォーマットの設定です。 60 型は @ref PicaDataTextureFormat です。 61 */ 62 /* 63 値は、 64 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_BYTE 65 PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_BYTE 66 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_5_5_5_1 67 PICA_DATA_TEXTURE_FORMAT_RGB_UNSIGNED_SHORT_5_6_5 68 PICA_DATA_TEXTURE_FORMAT_RGBA_UNSIGNED_SHORT_4_4_4_4 69 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE 70 PICA_DATA_TEXTURE_FORMAT_HILO8_DMP_UNSIGNED_BYTE 71 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_BYTE 72 PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_BYTE 73 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_ALPHA_UNSIGNED_BYTE_4_4_DMP 74 PICA_DATA_TEXTURE_FORMAT_LUMINANCE_UNSIGNED_4BITS_DMP 75 PICA_DATA_TEXTURE_FORMAT_ALPHA_UNSIGNED_4BITS_DMP 76 PICA_DATA_TEXTURE_FORMAT_ETC1_RGB8_NATIVE_DMP 77 PICA_DATA_TEXTURE_FORMAT_ETC1_ALPHA_RGB8_A4_NATIVE_DMP 78 のいずれかを設定します。 79 */ 80 PicaDataTextureFormat format; 81 82 /*! 83 @brief テクスチャ座標 s の設定です。 84 型は @ref PicaDataTextureWrap です。 85 初期値はPICA_DATA_TEXTURE_WRAP_REPEATです。 86 */ 87 /* 88 PICA_DATA_TEXTURE_WRAP_CLAMP_TO_EDGE 89 PICA_DATA_TEXTURE_WRAP_CLAMP_TO_BORDER 90 PICA_DATA_TEXTURE_WRAP_REPEAT 91 PICA_DATA_TEXTURE_WRAP_MIRRORED_REPEAT 92 のいずれかを設定します。 93 */ 94 PicaDataTextureWrap wrapT; 95 96 /*! 97 @brief テクスチャ座標 s の設定です。 98 型は @ref PicaDataTextureWrap です。 99 初期値はPICA_DATA_TEXTURE_WRAP_REPEATです。 100 */ 101 /* 102 PICA_DATA_TEXTURE_WRAP_CLAMP_TO_EDGE 103 PICA_DATA_TEXTURE_WRAP_CLAMP_TO_BORDER 104 PICA_DATA_TEXTURE_WRAP_REPEAT 105 PICA_DATA_TEXTURE_WRAP_MIRRORED_REPEAT 106 のいずれかを設定します。 107 */ 108 PicaDataTextureWrap wrapS; 109 110 /*! 111 @brief テクスチャ拡大フィルタの設定です。 112 型は @ref PicaDataTextureMagFilter です。 113 初期値はPICA_DATA_TEXTURE_MAG_FILTER_NEARESTです。 114 */ 115 /* 116 PICA_DATA_TEXTURE_MAG_FILTER_NEAREST 117 PICA_DATA_TEXTURE_MAG_FILTER_LINEAR 118 のいずれかを設定します。 119 */ 120 PicaDataTextureMagFilter magFilter; 121 122 123 /*! 124 @brief テクスチャ縮小フィルタの設定です。 125 型は @ref PicaDataTextureMinFilter です。 126 初期値は PICA_DATA_TEXTURE_MIN_FILTER_NEAREST です。 127 */ 128 /* 129 値は、 130 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST 131 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_NEAREST 132 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR 133 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR 134 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST 135 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR 136 のいずれかを設定します。 137 MipMapを有効にしたい場合は 138 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR 139 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST 140 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR 141 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_NEAREST 142 のいずれかを設定してください。 143 */ 144 PicaDataTextureMinFilter minFilter; 145 NN_PADDING3; 146 147 /*! 148 @brief LODバイアスの設定です。 149 型は f32 です。 150 初期値は0.fです。 151 [-16.f : 16.f]の範囲で設定してください。 152 @see IsEnableMipMap() 153 */ 154 /* 155 コマンド生成時には13bit固定小数(fraction8)に変換されます。 156 MipMapが有効でないときは、無視されます。 157 */ 158 f32 lodBias; 159 160 /*! 161 @brief 最小LODレベルを設定します。値は u8 です。 162 初期値は0です。 163 0以上の値で設定します。 164 @see IsEnableMipMap() 165 */ 166 /* 167 MipMapが有効でないときは、無視されます。 168 */ 169 u8 minLodLevel; 170 171 172 /*! 173 @brief 最大LODレベルを設定します。値は u8 です。 174 初期値は0です。 175 @see IsEnableMipMap() 176 */ 177 /* 178 ロードしたMipMapの段数-1を設定してください。 179 MipMapが有効でないときは、無視されます。 180 */ 181 u8 maxLodLevel; 182 183 184 /*! 185 @brief ボーダーカラーの赤成分です。 186 値は u8 です。 187 初期値は0です。 188 */ 189 u8 borderColorR; 190 191 /*! 192 @brief ボーダーカラーの緑成分です。 193 値は u8 です。 194 初期値は0です。 195 */ 196 u8 borderColorG; 197 198 199 /*! 200 @brief ボーダーカラーの青成分です。 201 値は u8 です。 202 初期値は0です。 203 */ 204 u8 borderColorB; 205 206 207 /*! 208 @brief ボーダーカラーのアルファ成分です。 209 値は u8 です。 210 初期値は0です。 211 */ 212 u8 borderColorA; 213 214 NN_PADDING2; 215 216 protected : 217 /*! 218 @brief MipMapが有効かどうかを判定します。 219 */ 220 /* 221 MipMapを有効にしたい場合は、minFilterに 222 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_LINEAR 223 PICA_DATA_TEXTURE_MIN_FILTER_LINEAR_MIPMAP_NEAREST 224 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_LINEAR 225 PICA_DATA_TEXTURE_MIN_FILTER_NEAREST_MIPMAP_NEAREST 226 のいずれかを設定してください。 227 */ IsEnableMipMap()228 bool IsEnableMipMap() const 229 { 230 if ( minFilter == PICA_DATA_TEXTURE_MIN_FILTER_LINEAR ) return false; 231 if ( minFilter == PICA_DATA_TEXTURE_MIN_FILTER_NEAREST ) return false; 232 return true; 233 } 234 235 /*! 236 @brief 初期値を設定します。 237 */ 238 UnitBase(); 239 }; 240 241 public : 242 243 /*! 244 @brief テクスチャユニット0の設定のためのクラスです。 245 */ 246 class Unit0 : public UnitBase 247 { 248 public : 249 /*! 250 @brief テクスチャユニット0のサンプラータイプの設定です。 251 型は @ref PicaDataTexture0SamplerType です。 252 初期値はPICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_FALSEです。 253 */ 254 255 /* 256 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_2D 257 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_CUBE_MAP 258 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_SHADOW_2D_DMP 259 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_PROJECTION_DMP 260 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_SHADOW_CUBE_DMP 261 PICA_DATA_TEXTURE0_SAMPLER_TYPE_TEXTURE_FALSE 262 のいずれかを設定します。 263 */ 264 PicaDataTexture0SamplerType texType; 265 NN_PADDING3; 266 267 /*! 268 @brief キューブマップ[ +x ]テクスチャの物理アドレスの設定です。 269 型は uptr です。 270 */ 271 uptr cubeMapAddrPosX; 272 273 /*! 274 @brief キューブマップ[ -x ]テクスチャの物理アドレスの設定です。 275 型は uptr です。 276 */ 277 uptr cubeMapAddrNegX; 278 279 /*! 280 @brief キューブマップ[ +y ]テクスチャの物理アドレスの設定です。 281 型は uptr です。 282 */ 283 uptr cubeMapAddrPosY; 284 285 /*! 286 @brief キューブマップ[ -Y ]テクスチャの物理アドレスの設定です。 287 型は uptr です。 288 */ 289 uptr cubeMapAddrNegY; 290 291 /*! 292 @brief キューブマップ[ +Z ]テクスチャの物理アドレスの設定です。 293 型は uptr です。 294 */ 295 uptr cubeMapAddrPosZ; 296 297 /*! 298 @brief キューブマップ[ -Z ]テクスチャの物理アドレスの設定です。 299 型は uptr です。 300 */ 301 uptr cubeMapAddrNegZ; 302 303 public : 304 /*! 305 @brief 設定された情報をもとに、テクスチャユニット0の設定コマンドを生成します。 306 307 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 308 @param[in] is_update_texture_func サンプラータイプなどの設定を変えた場合はtrueを設定します。 309 310 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 311 */ 312 bit32* MakeCommand( bit32* command, bool is_update_texture_func = true ) const; 313 314 /*! 315 @brief 初期値を設定します。 316 317 @param[in] texture_ テクスチャです。 318 */ 319 explicit Unit0( const Texture& texture_ ); 320 321 private : 322 const Texture& m_Texture; 323 }; 324 325 /*! 326 @brief テクスチャユニット1の設定のためのクラスです。 327 */ 328 class Unit1 : public UnitBase 329 { 330 public : 331 /*! 332 @brief テクスチャユニット1のサンプラータイプの設定です。 333 型は @ref PicaDataTexture1SamplerType です。 334 初期値はPICA_DATA_TEXTURE1_SAMPLER_TYPE_FALSEです。 335 */ 336 /* 337 PICA_DATA_TEXTURE1_SAMPLER_TYPE_TEXTURE_2D 338 PICA_DATA_TEXTURE1_SAMPLER_TYPE_FALSE 339 のいずれかを設定します。 340 */ 341 PicaDataTexture1SamplerType texType; 342 NN_PADDING3; 343 344 public : 345 /*! 346 @brief 設定された情報をもとに、テクスチャユニット1の設定コマンドを生成します。 347 348 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 349 @param[in] is_update_texture_func サンプラータイプなどの設定を変えた場合はtrueを設定します。 350 351 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 352 */ 353 bit32* MakeCommand( bit32* command, bool is_update_texture_func = true ) const; 354 355 /*! 356 @brief 初期値を設定します。 357 358 @param[in] texture_ テクスチャです。 359 */ 360 explicit Unit1( const Texture& texture_ ); 361 362 private : 363 const Texture& m_Texture; 364 }; 365 366 /*! 367 @brief テクスチャユニット2の設定のためのクラスです。 368 */ 369 class Unit2 : public UnitBase 370 { 371 public : 372 /*! 373 @brief テクスチャユニット2のサンプラータイプの設定です。 374 型は @ref PicaDataTexture2SamplerType です。 375 */ 376 /* 377 値は、 378 PICA_DATA_TEXTURE2_SAMPLER_TYPE_TEXTURE_2D 379 PICA_DATA_TEXTURE2_SAMPLER_TYPE_FALSE 380 のいずれかを設定します。 381 */ 382 PicaDataTexture2SamplerType texType; 383 384 /* 385 @brief テクスチャユニット2のテクスチャ座標選択の設定です。 386 型は @ref PicaDataTexture2TexCoord です。 387 初期値は PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE2 です。 388 */ 389 /* 390 値は、 391 PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE1 392 PICA_DATA_TEXTURE2_TEXCOORD_TEXTURE2 393 のいずれかを設定します。 394 */ 395 PicaDataTexture2TexCoord texCoord; 396 397 NN_PADDING2; 398 399 public : 400 /*! 401 @brief 設定された情報をもとに、テクスチャユニット2の設定コマンドを生成します。 402 403 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 404 @param[in] is_update_texture_func サンプラータイプなどの設定を変えた場合はtrueを設定します。 405 406 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 407 */ 408 bit32* MakeCommand( bit32* command, bool is_update_texture_func = true ) const; 409 410 /*! 411 @brief 初期値を設定します。 412 413 @param[in] texture_ テクスチャです。 414 */ 415 explicit Unit2( const Texture& texture_ ); 416 417 private : 418 const Texture& m_Texture; 419 }; 420 421 /*! 422 @brief テクスチャユニット3の設定のためのクラスです。 423 */ 424 class Unit3 : private UnitBase 425 { 426 public : 427 /*! 428 @brief テクスチャユニット3のサンプラータイプの設定です。 429 型は @ref PicaDataTexture3SamplerType です。 430 初期値は PICA_DATA_TEXTURE3_SAMPLER_TYPE_FALSE です。 431 */ 432 /* 433 値は、 434 PICA_DATA_TEXTURE3_SAMPLER_TYPE_TEXTURE_PROCEDURAL_DMP 435 PICA_DATA_TEXTURE3_SAMPLER_TYPE_FALSE 436 のいずれかを設定します。 437 */ 438 PicaDataTexture3SamplerType texType; 439 440 /*! 441 @brief テクスチャユニット3のテクスチャ座標選択の設定です。 442 型は @ref PicaDataTexture3TexCoord です。 443 初期値はPICA_DATA_TEXTURE3_TEXCOORD_TEXTURE0です。 444 */ 445 /* 446 値は、 447 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE0 448 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE1 449 PICA_DATA_TEXTURE3_TEXCOORD_TEXTURE2 450 のいずれかを設定します。 451 */ 452 PicaDataTexture3TexCoord texCoord; 453 454 NN_PADDING2; 455 456 public : 457 /*! 458 @brief 設定された情報をもとに、テクスチャユニット3の設定コマンドを生成します。 459 460 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 461 @param[in] is_update_texture_func サンプラータイプなどの設定を変えた場合はtrueを設定します。 462 463 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 464 */ 465 bit32* MakeCommand( bit32* command, bool is_update_texture_func = true ) const; 466 467 /*! 468 @brief 初期値を設定します。 469 470 @param[in] texture_ テクスチャです。 471 */ 472 explicit Unit3( const Texture& texture_ ); 473 474 private : 475 const Texture& m_Texture; 476 }; 477 478 public : 479 /*! 480 @brief テクスチャユニット0についての設定です。 481 型は nn::gr::CTR::Texture::Unit0 です。 482 */ 483 Unit0 unit0; 484 485 /*! 486 @brief テクスチャユニット1についての設定です。 487 型は nn::gr::CTR::Texture::Unit1 です。 488 */ 489 Unit1 unit1; 490 491 /*! 492 @brief テクスチャユニット2についての設定です。 493 型は nn::gr::CTR::Texture::Unit2 です。 494 */ 495 Unit2 unit2; 496 497 /*! 498 @brief テクスチャユニット3についての設定です。 499 型は nn::gr::CTR::Texture::Unit3 です。 500 */ 501 Unit3 unit3; 502 503 public : 504 /*! 505 @brief 各設定の初期値を設定します。 506 */ 507 Texture(); 508 509 /*! 510 @brief 設定された情報をもとに、すべてのテクスチャの設定コマンドを生成します。 511 512 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 513 @param[in] isAddDummyCommand 0x80 へのダミー書き込みコマンドを 3回 生成します。 514 515 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 516 */ 517 bit32* MakeCommand( bit32* command, bool isAddDummyCommand = true ) const; 518 519 /*! 520 @brief 設定された情報をもとに、テクスチャユニットの有効/無効コマンドなどを生成します。 521 522 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 523 @param[in] isAddDummyCommand 0x80 へのダミー書き込みコマンドを 3回 生成します。 524 525 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 526 */ 527 bit32* MakeFuncCommand( bit32* command, bool isAddDummyCommand = true ) const; 528 }; 529 530 } // namespace CTR 531 } // namespace gr 532 } // namespace nn 533 534 #endif // NN_GR_TEXTURE_H_ 535