Texture2DArray е шейдър модел 4 нещо. Не вярвам да го използвате на dx9.
Ако използвате шейдър модел 4, тогава просто използвайте функцията Load(4, 5).
В противен случай за sm1,2,3 можете да поставите числата, които искате, напр. 4.0f и 5.0 във вашия връх като нормални texcoord данни. След това накарайте пикселния шейдър да го мащабира според размера на текстурата.
struct VertexInput {
float4 pos : POSITION;
float2 uv : TEXCOORD0; //0.0, 1.0, 2.0, 3.0, 4.0 etc
};
struct PixelInput {
float4 position : POSITION;
float2 uv : TEXCOORD0;
};
PixelInput vsTex(VertexInput vtx)
{
PixelInput output;
float4 pos = vtx.pos;
output.position = mul(pos, MatWorld);
output.position = mul(output.position, MatView);
output.position = mul(output.position, MatProj);
output.uv = vtx.uv;
return output;
}
float4 PixelShader(PixelInput input) : SV_Target
{
float coords = pix.uv / float2(TEX_WIDTH, TEX_HEIGHT);
return tex = tex2D(mySampler, coords);
}
Където TEX_WIDTH, TEX_HEIGHT се предават чрез параметъра 'defines' на D3DXCompileShader. И
ИЛИ: просто направете 4.0f/tex_width и 5.0/tex_height в софтуера и просто предайте това число (което ще бъде между [0.0f,1.0f] до пикселния шейдър)
person
Pod
schedule
23.10.2012