将NORMAL添加到inputLayout时出错

问题描述

我试图将norMAL向量添加到inputLayout中,但是当我添加此行时,出现此错误

D3D11错误:ID3D11Device :: CreateInputLayout:提供的输入签名期望读取具有SemanticName / Index:'norMAL'/ 0的元素,但声明未提供匹配的名称。 [STATE_CREATION错误#163:CREATEINPUTLAYOUT_MISSINGELEMENT]

在这里设置输入布局:

 {"POSITION",dxgi_FORMAT::dxgi_FORMAT_R32G32B32_FLOAT,D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA,0},{"norMAL",dxgi_FORMAT_R32G32B32_FLOAT,12,D3D11_INPUT_PER_VERTEX_DATA,{"TEXCOORD",dxgi_FORMAT_R32G32_FLOAT,D3D11_APPEND_ALIGNED_ELEMENT,

这是VertexShader:

struct VSinput
{
float3 pos : POSITION;
float2 textCoord : TEXCOORD0;
float3 test : norMAL0;
};

struct PSinput
{
float4 position : SV_Position;
float2 textCoord : TEXCOORD0;
float3 test : norMAL0;
 };

 PSinput vs_main(VSinput input)
 {
  PSinput output = (PSinput) 0;

 // input.pos.y += Yoffset;
  output.position = mul(float4(input.pos,1.0),mat);

  output.textCoord = input.textCoord;



  return output;


}

如您所见,有一个带有norMAL SemanticName和索引0的输入

解决方法

由于着色器链接规则,您无法在Direct3D 10或更高版本中更改布局顺序。

要么使用您的着色器:

struct VSinput
{
float3 pos : POSITION;
float3 test : NORMAL0;
float2 textCoord : TEXCOORD0;
};

-或者-使用输入布局:

{"POSITION",DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT,D3D11_INPUT_PER_VERTEX_DATA,0},{"TEXCOORD",DXGI_FORMAT_R32G32_FLOAT,D3D11_APPEND_ALIGNED_ELEMENT,{"NORMAL",DXGI_FORMAT_R32G32B32_FLOAT,