D3DXCompileShader无法编译带有NORMAL的着色器

时间:2017-12-08 07:39:02

标签: directx shader hlsl

我注意到,由于以下原因,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;
}

1 个答案:

答案 0 :(得分:3)

您提供的链接明确指出NORMAL语义仅支持VS输入。 您可以尝试使用TEXCOORD(例如TEXCOORD3)将法线传递给像素着色器。