将 NORMAL 添加到 inputLayout 时出错
Error when adding NORMAL to the inputLayout
我正在尝试将 NORMAL 矢量添加到 inputLayout 中,但是当我添加这一行时,我遇到了这个错误:
D3D11 ERROR: ID3D11Device::CreateInputLayout: The provided input signature expects to read an element with SemanticName/Index: 'NORMAL'/0, but the declaration doesn't provide a matching name. [ STATE_CREATION ERROR #163: CREATEINPUTLAYOUT_MISSINGELEMENT]
这是我设置 InputLayout 的地方:
{"POSITION",0,DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA,0},
{"NORMAL",0, DXGI_FORMAT_R32G32B32_FLOAT,0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
这是顶点着色器:
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",0,DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL",0, DXGI_FORMAT_R32G32B32_FLOAT,0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
我正在尝试将 NORMAL 矢量添加到 inputLayout 中,但是当我添加这一行时,我遇到了这个错误:
D3D11 ERROR: ID3D11Device::CreateInputLayout: The provided input signature expects to read an element with SemanticName/Index: 'NORMAL'/0, but the declaration doesn't provide a matching name. [ STATE_CREATION ERROR #163: CREATEINPUTLAYOUT_MISSINGELEMENT]
这是我设置 InputLayout 的地方:
{"POSITION",0,DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_CLASSIFICATION::D3D11_INPUT_PER_VERTEX_DATA,0},
{"NORMAL",0, DXGI_FORMAT_R32G32B32_FLOAT,0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
这是顶点着色器:
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",0,DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL",0, DXGI_FORMAT_R32G32B32_FLOAT,0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},