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