如何解决将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,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。