我注意到,由于以下原因,Ogre库中的D3DXCompileShader
函数在DirectX9中失败:
error X4502: invalid vs_2_0 output semantic 'NORMAL'
对我来说似乎很奇怪,因为MSDN states应该从DirectX 9开始支持它:
Direct3D 9和Direct3D 10及更高版本都支持以下类型的语义
这是我的hlsl
文件:
float4x4 worldViewProj;
float4 lightPosition;
float3 eyePosition;
struct VS_OUTPUT
{
float4 pos: POSITION;
float4 normal: NORMAL;
float4 color: COLOR;
float4 lightPosition: TEXCOORD0;
float3 eyePosition: TEXCOORD1;
float3 pos3d: TEXCOORD2;
};
VS_OUTPUT main(
float4 pos: POSITION,
float4 normal: NORMAL,
float4 color: COLOR
)
{
VS_OUTPUT Out;
Out.pos = mul(worldViewProj, pos);
Out.pos3d = pos.xyz;
Out.normal = normal;
Out.color = color;
Out.lightPosition = lightPosition;
Out.eyePosition = eyePosition;
return Out;
}
答案 0 :(得分:3)
您提供的链接明确指出NORMAL语义仅支持VS输入。 您可以尝试使用TEXCOORD(例如TEXCOORD3)将法线传递给像素着色器。