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>