D3DFMT_L8
パレット画像を含むテクスチャと、パレットを含む256x1画像を作成しますD3DFMT_X8R8G8B8
。
HLSLシェーダーコード:
uniform sampler2D image;
uniform sampler1D palette;
float4 main(in float2 coord:TEXCOORD) : COLOR
{
return tex1D(palette, tex2D(image, coord).r * (255./256) + (0.5/256));
}
輝度(パレットインデックス)は、乗算加算操作で調整されることに注意してください。これが必要なのは、パレットインデックス255が白(最大輝度)と見なされ、フロートとして表されると1.0fになるためです。その座標でパレットテクスチャを読み取ると、(部分部分のみが使用されるため)ラップアラウンドし、代わりに最初のパレットエントリを読み取ります。
コンパイル:
fxc /Tps_2_0 PaletteShader.hlsl /FhPaletteShader.h
次のように使用します。
// ... create and populate texture and paletteTexture objects ...
d3dDevice->CreatePixelShader((DWORD*)g_ps20_main, &shader)
// ...
d3dDevice->SetTexture(1, paletteTexture);
d3dDevice->SetPixelShader(shader);
// ... draw texture to screen as textured quad as usual ...