ID3D11Device::CreateVertexShader 抛出 [错误 STATE_CREATION #167: CREATEVERTEXSHADER_INVALIDSHADERTYPE ]
ID3D11Device::CreateVertexShader throws [ ERROR STATE_CREATION #167: CREATEVERTEXSHADER_INVALIDSHADERTYPE ]
我有 2D 视频坐标 (x, y) 来渲染线条以供查看 window。在运行时 ID3D11Device::CreateVertexShader 抛出异常 [错误 STATE_CREATION #167: CREATEVERTEXSHADER_INVALIDSHADERTYPE ]
我已经尝试修改输入布局和结构,但它看起来符合我的预期。关于我的情况,我无法确定异常的真正原因。
/// <summary>Direct3D input layout for 2D position vertex. </summary>
static D3D11_INPUT_ELEMENT_DESC Pos2DVertexLayout[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
};
struct PSClipPosColor
{
float4 position : SV_POSITION;
float2 depth : TEXCOORD0;
float4 clipPos : TEXCOORD1;
float4 color : COLOR;
};
DirectX::XMFLOAT4 fixedColor {0, 0, 0, 1};
PSClipPosColor main(float2 position : POSITION0)
{
PSClipPosColor output = (PSClipPosColor)0;
float4 pos = float4(position, 0.0f, 1.0f);
output.position = mul(pos, worldViewProjection);
output.depth.xy = output.position.zw;
output.color = fixedColor;
output.clipPos = mul(pos, world);
return output;
}
我希望顶点着色器应该为所描述的输入布局采用 2D 视频坐标位置值。而是抛出异常 [ ERROR STATE_CREATION #167: CREATEVERTEXSHADER_INVALIDSHADERTYPE ]
请大家帮我看看是哪里出了问题。
我找到了我的问题所在。太傻了。
在 *.vcxproj 文件中,我手动声明了变量名 PS 到 VS 和 VS 到 PS.
是:
<FxCompile Include="Shaders\DrawLinesElementPS.hlsl">
<ShaderType>Pixel</ShaderType>
<VariableName>drawLinesElementVS</VariableName>
</FxCompile>
<FxCompile Include="Shaders\DrawLinesElementVS.hlsl">
<VariableName>drawLinesElementPS</VariableName>
</FxCompile>
现在:
<FxCompile Include="Shaders\DrawLinesElementPS.hlsl">
<ShaderType>Pixel</ShaderType>
<VariableName>drawLinesElementPS</VariableName>
</FxCompile>
<FxCompile Include="Shaders\DrawLinesElementVS.hlsl">
<VariableName>drawLinesElementVS</VariableName>
</FxCompile>
我有 2D 视频坐标 (x, y) 来渲染线条以供查看 window。在运行时 ID3D11Device::CreateVertexShader 抛出异常 [错误 STATE_CREATION #167: CREATEVERTEXSHADER_INVALIDSHADERTYPE ]
我已经尝试修改输入布局和结构,但它看起来符合我的预期。关于我的情况,我无法确定异常的真正原因。
/// <summary>Direct3D input layout for 2D position vertex. </summary>
static D3D11_INPUT_ELEMENT_DESC Pos2DVertexLayout[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
};
struct PSClipPosColor
{
float4 position : SV_POSITION;
float2 depth : TEXCOORD0;
float4 clipPos : TEXCOORD1;
float4 color : COLOR;
};
DirectX::XMFLOAT4 fixedColor {0, 0, 0, 1};
PSClipPosColor main(float2 position : POSITION0)
{
PSClipPosColor output = (PSClipPosColor)0;
float4 pos = float4(position, 0.0f, 1.0f);
output.position = mul(pos, worldViewProjection);
output.depth.xy = output.position.zw;
output.color = fixedColor;
output.clipPos = mul(pos, world);
return output;
}
我希望顶点着色器应该为所描述的输入布局采用 2D 视频坐标位置值。而是抛出异常 [ ERROR STATE_CREATION #167: CREATEVERTEXSHADER_INVALIDSHADERTYPE ]
请大家帮我看看是哪里出了问题。
我找到了我的问题所在。太傻了。
在 *.vcxproj 文件中,我手动声明了变量名 PS 到 VS 和 VS 到 PS.
是:
<FxCompile Include="Shaders\DrawLinesElementPS.hlsl">
<ShaderType>Pixel</ShaderType>
<VariableName>drawLinesElementVS</VariableName>
</FxCompile>
<FxCompile Include="Shaders\DrawLinesElementVS.hlsl">
<VariableName>drawLinesElementPS</VariableName>
</FxCompile>
现在:
<FxCompile Include="Shaders\DrawLinesElementPS.hlsl">
<ShaderType>Pixel</ShaderType>
<VariableName>drawLinesElementPS</VariableName>
</FxCompile>
<FxCompile Include="Shaders\DrawLinesElementVS.hlsl">
<VariableName>drawLinesElementVS</VariableName>
</FxCompile>