gpt4 book ai didi

c++ - 添加几何着色器会导致 “shader linkage error”

转载 作者:行者123 更新时间:2023-12-02 10:34:53 28 4
gpt4 key购买 nike

我在我的DirectX 11程序中添加了一个几何着色器(一个非常简单的着色器)。我已经写了顶点和像素着色器,它们按预期工作-没有错误,没有警告。着色器也很简单。顶点着色器是:

cbuffer PerApplication : register(b0)
{
matrix projectionMatrix;
}

cbuffer PerFrame : register(b1)
{
matrix viewMatrix;
}

cbuffer PerObject : register(b2)
{
matrix worldMatrix;
}

struct VertexShaderInput
{
float4 position : POSITION;
float4 color: COLOR;
};

struct VertexShaderOutput
{
float4 color : COLOR;
float4 position : SV_POSITION;
};

//entry point
VertexShaderOutput SimpleVertexShader(VertexShaderInput IN)
{
VertexShaderOutput OUT;

matrix mvp = mul(projectionMatrix, mul(viewMatrix, worldMatrix));
OUT.color = IN.color;
OUT.position = mul(mvp, IN.position);

return OUT;
}
像素着色器是:
struct PixelShaderInput
{
float4 color : COLOR;
};

float4 SimplePixelShader(PixelShaderInput IN) : SV_TARGET
{
return IN.color;
}
好吧,正如我所说的,这很好。然后,我添加了一个几何着色器,它实际上什么也没做,只是取一个三角形并返回相同的三角形。几何着色器是:
struct VertexInput
{
float4 color : COLOR;
float4 position : POSITIONT;
};

struct VertexOutput
{
float4 color : COLOR;
float4 position : SV_Position;
};

[maxvertexcount(3)]
void SimpleGeometryShader(triangle VertexInput input[3], inout TriangleStream<VertexOutput> stream)
{
VertexOutput v1 = { input[0].color, input[0].position };
stream.Append(v1);
VertexOutput v2 = { input[1].color, input[1].position };
stream.Append(v2);
VertexOutput v3 = { input[2].color, input[2].position };
stream.Append(v3);

stream.RestartStrip();
}
这样做还需要更改顶点着色器,现在它会返回
struct VertexShaderOutput
{
float4 color : COLOR;
float4 position : POSITIONT; //I'm not returning SV_Position in vertex shader anymore.
};
该程序本身可以正常运行,并且可以按预期运行,我明白了自己的期望。但是现在有两个D3D11错误:

D3D11 ERROR: ID3D11DeviceContext::DrawIndexed: Vertex Shader - Geometry Shader linkage error: Signatures between stages are incompatible. The input stage requires Semantic/Index (POSITIONT,0) as input, but it is not provided by the output stage. [ EXECUTION ERROR #342: DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND]

D3D11 ERROR: ID3D11DeviceContext::DrawIndexed: Geometry Shader - Pixel Shader linkage error: Signatures between stages are incompatible. The input stage requires Semantic/Index (TEXCOORD,0) as input, but it is not provided by the output stage. [ EXECUTION ERROR #342: DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND]


两者都很奇怪。顶点着色器明显返回POSITIONT,并且COLOR和POSITIONT的顺序相同。我怎么了

最佳答案

问题的原因是,除了使用我提供的着色器渲染场景外,我还使用一些库来绘制文本。显然,其中包含一些顶点和像素着色器,并带有它们自己的输入和输出签名。将几何体着色器设置为null解决了我的问题。

关于c++ - 添加几何着色器会导致 “shader linkage error”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60743224/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com