KMSTATUS kmSetPaletteData( pPaletteTable )
PKMPALETTEDATA pPaletteTable
pPaletteTable (入力)パレット設定用配列のポインタ
KMSTATUS_SUCCESS 成功
パレットテクスチャで使用されるオンチップパレット(パレットメモリ)の設定を行います。ドリームキャストでは16ビットカラーと32ビットカラーのパレットをサポートしています。 パレットに使用できる色数は1024個です。 また、利用できるパレットテクスチャは16色と256色のインデックス付きのテクスチャです。
引数pPaletteTableに渡すパレットデータの要素数は1024個すべてを指定する必要があります。 要素数が1024個以外の場合の動作は保証しません。
16bppのスクリーンモードでは1クロックで1ピクセルの読み出しができるため、 1ピクセルに2クロックかかる32bppより高速です。
16色パレットテクスチャ(4bpp)を利用する場合は、 パレットメモリを64のバンクに分けて使用します(1024個 / 16色 = 64バンク) 。 256色パレットテクスチャ(8bpp)を利用する場合は、 パレットメモリを4つのバンクに分けて使用します(1024個 / 256色 = 4バンク) 。 各バンクは物理的に分離されているわけではなく、 1024個のパレットへのポインタを計算で求めることにより作り出しています。
同一シーンの中で16色パレットテクスチャと256色パレットテクスチャは混在可能ですが、 1024個のパレットの中で重なった部分は共用されます。 そのため、パレットの内容の変更は、16色と256色のパレットテクスチャ両方に影響が出ます。 パレットのバンクは、VERTEX(ポリゴン)単位に指定できます。
バンク番号はKMVERTEXCONTEXTの、PaletteBankメンバで指定します。
実際に使用されるエントリは、パレットバンク番号(PaletteBank)とテクスチャの 各テクセルのインデックス値(index_data)より、下記のように選択されます。
if (PixelFormat == 8BPP) { palette_entry = (PaletteBank << 4) & 0x300 + index_data; } if (PixelFormat == 4BPP) { palette_entry = (PaletteBank << 4) + index_data; }引数 PaletteBankに指定できる値は、16色パレットテクスチャの時は0〜63のいずれかです。 この値は、256色パレットテクスチャの時も0〜63ですが、この場合PaletteBank値は6bit中の上位2bitのみが有効なので、 使用できる値は0(0〜15)、16(16〜31)、32(32〜47)、48(48〜63)の4種の中のいずれかとなります。
/* パレットの最初の256エントリに16bppのデータを設定する */ KMPALETTEDATA PaletteTable; j = 0; for(i = 0; i < 512; i+=2) { PaletteTable.dwPaletteData[j++] = (KMDWORD)((pdata[i+1]*256) + pdata[i]); } kmSetPaletteData(&PaletteTable);
パレットデータの設定( kmSetPaletteData()関数 / kmSetPaletteBank()関数 / kmSetPaletteBankData()関数 )は、 パレットモードの設定( kmSetPaletteMode()関数)の後で行わなければなりません。 パレットモードとパレットデータの形式が一致していない場合は、パレットレジスタに不正なデータが設定されます。
kmSetPaletteBank() オンチップパレットデータの書き換え(バンク単位) kmSetPaletteBankData() オンチップパレットデータの書き換え kmSetPaletteMode() オンチップパレットモードの設定