有关HLSL在SVP和HVP之间不正确的问题,请高手指点
问题是这样的,我写了一个非常简单的HLSL,在Software Vertex Processing下是正确的,但是一旦使用Hardware Vertex Processing就不能正确显示了,看结果应该是Shader没有执行(虽然设置了使用HLSL来渲染,但实际还是执行的固定管线的渲染),以下是简单的HLSL代码:
请教高手,为什么会是这样?
// test.fx
const float2 QUAD_TEXCOORD[4] =
{
float2(0.0f, 0.0f),
float2(1.0f, 0.0f),
float2(0.0f, 1.0f),
float2(1.0f, 1.0f),
};
const float4 PP[4] =
{
float4(0.0f, 0.0f, 0.0f, 1.0f),
float4(0.5f, 0.0f, 0.0f, 1.0f),
float4(0.0f, 0.5f, 0.0f, 1.0f),
float4(0.5f, 0.5f, 0.0f, 1.0f),
};
struct VS_INPUT
{
float4 position0 : POSITION0;
float4 color0 : COLOR0;
float2 texcoord0 : TEXCOORD0;
float4 index : BLENDINDICES;
};
struct VS_OUTPUT
{
float4 position : POSITION;
float4 color0 : COLOR0;
float2 texcoord0 : TEXCOORD0;
};
VS_OUTPUT vs_main(VS_INPUT vs_in)
{
VS_OUTPUT vs_out;
int vert_index[4];
float4 pos;
float2 t;
int4 vv = D3DCOLORtoUBYTE4(vs_in.index);
vert_index = (int[4])vv;
vs_out.position = PP[vert_index[1]];
vs_out.color0 = float4(1.0f, 1.0f, 1.0f, 1.0f);
vs_out.texcoord0 = QUAD_TEXCOORD[vert_index[1]];
return vs_out;
}
technique t0
{
pass p0
{
VertexShader = compile vs_2_0 vs_main();
PixelShader = null;
}
}