##### Kamui2 Library - テクスチャ制御関数

# kmReLoadMipmap

特定のミップマップテクスチャの再読み込み

### 書式

> `KMSTATUS kmReLoadMipmap( pSurfaceDesc, pTexture, nMipmapCount )
> PKMSURFACEDESC pSurfaceDesc
> PKMVOID pTexture
> KMINT32 nMipmapCount
> `

### 引数

> pSurfaceDesc | (入力)リロード先
> pTexture | (入力)リロード元
> nMipmapCount | (入力)読み込むミップマップテクスチャのレベル

### 戻り値

> KMSTATUS_SUCCESS | 成功
> KMSTATUS_INVALID_PARAMETER | パラメータが不正
> KMSTATUS_INVALID_TEXTURE_TYPE | 無効なテクスチャタイプを指定した

### 解説

> kmCreateTextureSurface()関数 / kmCreateCombinedTextureSurface()関数 / kmCreateContiguousTextureSurface()関数 / kmCreateFixedTextureArea()関数で確保したグラフィックメモリ上のテクスチャ領域に、pTextureが指すメインメモリ上のミップマップテクスチャデータを上書きします。

> 指定できるテクスチャ(サーフェス)のタイプは以下のいずれかです。

> 定義 | 意味
> KM_TEXTURE_TWIDDLED_MM | Twiddledミップマップテクスチャ
> KM_TEXTURE_VQ_MM | VQミップマップテクスチャ
> KM_TEXTURE_PALETTIZE4_MM | 4Bit(16色)パレットミップマップテクスチャ
> KM_TEXTURE_PALETTIZE8_MM | 8Bit(256色)パレットミップマップテクスチャ
> KM_TEXTURE_SMALLVQ_MM | Small VQミップマップテクスチャ

> 読み込むテクスチャのフォーマット形式、サイズなどは、 pSurfaceDescが指すサーフェスディスクリプタより判断します。 システムメモリ側のテクスチャデータの先頭アドレスを32バイトアライメントに配置しサイズが32バイトの倍数であれば、テクスチャメモリへの転送にDMAを使用して高速な転送を行います。 テクスチャの転送にDMAが使用された場合、その終了を待つか否かを選択することができます。

> 引数pSurfaceDescは、 kmCreateTextureSurface()関数 / kmCreateCombinedTextureSurface()関数 / kmCreateContiguousTextureSurface()関数 / kmCreateFixedTextureArea()関数で確保したテクスチャサーフェス KMSURFACEDESC 型の構造体へのポインタ、 つまりリロード先です。

> 引数pTextureは、メインメモリ上のテクスチャのピクセルデータ部分を示すポインタで、 nMipmapCountが指すミップマップレベルのテクスチャデータの先頭を示します。 つまりリロード元です。

> 引数nMipmapCountには、読み込むミップマップテクスチャのレベルを指定します。 下記のenum値のなかからいずれかひとつを指定することができます。

> 定義 | 意味
> KM_MAPSIZE_1 | 1x1
> KM_MAPSIZE_2 | 2x2
> KM_MAPSIZE_4 | 4x4
> KM_MAPSIZE_8 | 8x8
> KM_MAPSIZE_16 | 16x16
> KM_MAPSIZE_32 | 32x32
> KM_MAPSIZE_64 | 64x64
> KM_MAPSIZE_128 | 128x128
> KM_MAPSIZE_256 | 256x256
> KM_MAPSIZE_512 | 512x512
> KM_MAPSIZE_1024 | 1024x1024

> kmSetSystemConfiguration()関数でflagにKM_CONFIGFLAG_NOWAIT_FINISH_TEXTUREDMAを指定した場合はDMAの終了を待たずに関数を終了します。 この場合は、 kmQueryFinishLastTextureDMA()関数でDMA転送の終了を確認することができます。

> テクスチャロード前に、CPU側でメインメモリ上のテクスチャデータを直接書き換えた場合などは、 キャッシュのコヒーレンシ確保のため、キャッシュのパージを行った上でロード関数を実行してください (SH4のocbwb命令を実行してください)。

> この関数によるテクスチャデータの転送は、データ転送先・転送元アドレスが32バイト境界とならず、 DMAが使用できないため kmLoadTexture()関数より遅くなります。

> VQ-Mipmapのリロード時には、リロード先とリロード元のテクスチャのコードブックが 一致していないと正しく表示されません。注意してください。 また、VQ-Mipmapのリロード時には、1x1 Mipmapが指定された場合はなにもしません。

> Palettized-Mipmapのリロード時には、リロード先とリロード元のテクスチャの パレットデータが一致していないと正しい絵が表示されません。注意してください。

### 備考

> KamuiテクスチャフォーマットにおけるTwiddled mipmapファイルの先頭から各mipmapレベルへのオフセットと各mipmapレベルのバイト数。 (ヘッダ部16バイトをのぞく)

> SIZE | OFFSET | BYTES
> 1x1 | 6 | 2
> 2x2 | 8 | 8
> 4x4 | 16(10h) | 32(20h)
> 8x8 | 48(30h) | 128(80h)
> 16x16 | 176(B0h) | 512(200h)
> 32x32 | 688(2B0h) | 2048(800h)
> 64x64 | 2736(AB0h) | 8192(2000h)
> 128x128 | 10928(2AB0h) | 32768(8000h)
> 256x256 | 43696(AAB0h) | 131072(20000h)
> 512x512 | 174768(2AAB0h) | 524288(80000h)
> 1024x1024 | 699056(AAAB0h) | 2097152(200000h)

> KamuiテクスチャフォーマットにおけるVQ mipmapファイルの先頭から 各mipmapレベルへのオフセットと各mipmapレベルのバイト数。 (ヘッダ部16バイトをのぞく)

> SIZE | OFFSET | BYTES
> 1x1 | -- | --
> 2x2 | 2048 + 1 | 1
> 4x4 | 2048 + 2 | 4
> 8x8 | 2048 + 6 | 16(10h)
> 16x16 | 2048 + 22(16h) | 64(40h)
> 32x32 | 2048 + 86(56h) | 256(100h)
> 64x64 | 2048 + 342(156h) | 1024(400h)
> 128x128 | 2048 + 1366(556h) | 4096(1000h)
> 256x256 | 2048 + 5462(1556h) | 16384(4000h)
> 512x512 | 2048 + 21846(5556h) | 65536(10000h)
> 1024x1024 | 2048 + 87382(15556h) | 262144(40000h)

> KamuiテクスチャフォーマットにおけるPalettized 4bpp mipmapファイルの先頭から 各mipmapレベルへのオフセットと各mipmapレベルのバイト数。 (ヘッダ部16バイトをのぞく)

> SIZE | OFFSET | BYTES
> 1x1 | 1 | 0.5
> 2x2 | 2 | 2
> 4x4 | 4 | 8
> 8x8 | 12(0Ch) | 32(20h)
> 16x16 | 44(2Ch) | 128(80h)
> 32x32 | 172(ACh) | 512(200h)
> 64x64 | 684(2ACh) | 2048(800h)
> 128x128 | 2732(AACh) | 8192(2000h)
> 256x256 | 10924(2AACh) | 32768(8000h)
> 512x512 | 43692(AAACh) | 131072(20000h)
> 1024x1024 | 174764(2AAACh) | 524288(80000h)

> KamuiテクスチャフォーマットにおけるPalettized 8bpp mipmapファイルの先頭から 各mipmapレベルへのオフセットと各mipmapレベルのバイト数。 (ヘッダ部16バイトをのぞく)

> SIZE | OFFSET | BYTES
> 1x1 | 3 | 1
> 2x2 | 4 | 4
> 4x4 | 8 | 16(10h)
> 8x8 | 24(18h) | 64(40h)
> 16x16 | 88(58h) | 256(100h)
> 32x32 | 344(158h) | 1024(400h)
> 64x64 | 1368(558h) | 4096(1000h)
> 128x128 | 5464(1558h) | 16384(4000h)
> 256x256 | 21848(5558h) | 65536(10000h)
> 512x512 | 87384(15558h) | 262144(40000h)
> 1024x1024 | 349528(55558h) | 1048576(100000h)

### 参照

> kmCreateTextureSurface() | テクスチャ用サーフェスの確保
> kmCreateCombinedTextureSurface() | 複合テクスチャサーフェスの確保
> kmCreateContiguousTextureSurface() | 連続したアドレス領域へのテクスチャサーフェスの作成
> kmCreateFixedTextureArea() | 固定テクスチャ領域の確保
> kmSetSystemConfiguration() | システム構成の設定
> kmQueryFinishLastTextureDMA() | 前回のDMA転送によるテクスチャロードの終了チェック
> kmLoadTexture() | テクスチャデータの読み込み

kmReLoadMipmap

COPYRIGHT © NEC Corporation / © SEGA ENTERPRISES, LTD., 1998-2000