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 передаются через параметр «определяет» D3DXCompileShader. И
ИЛИ: просто сделайте 4.0f/tex_width и 5.0/tex_height в программном обеспечении и просто передайте это число (которое будет между [0.0f, 1.0f] через пиксельный шейдер)
person
Pod
schedule
23.10.2012