在Vulkan中,顶点着色器中顶点的输出颜色与我在片段着色器中获得的颜色不同
问题描述:
在Vulkan中,我编写了一个简单的程序,用简单的顶点着色器和折痕着色器绘制固定颜色的线条。但是,输入片段着色器的颜色与顶点中设置的颜色不同。我使用RenderDoc进行了检查,并且传递给顶点着色器的颜色对于线的两个顶点都是正确的(1,1,1,1),并且也检查了它的输出,它也是相同的。但在片段着色器中,我得到的颜色是(1,1,0,1)。不明白为什么会发生这种情况。不管顶点着色器发出什么颜色,片段着色器中的输入始终为黄色。在Vulkan中,顶点着色器中顶点的输出颜色与我在片段着色器中获得的颜色不同
顶点着色器:
layout(location = 0) in vec4 position;
layout(location = 1) in vec4 color;
layout(location = 2) in vec2 texcoord;
out vec4 io_color;
out vec2 io_uv;
out vec4 io_position2;
layout(std140, binding = 0) uniform UniformBlock_uTransform
{
mat4 uTransform;
};
layout(std140, binding = 1) uniform UniformBlock_uTransform2
{
mat4 uTransform2;
};
void main()
{
io_uv = texcoord;
io_color = vec4(1,1,1,1); //Just to debug it
gl_Position = uTransform * position;
io_position2 = uTransform2 * position;
}
// Fragement:
in vec4 io_color;
layout(location = 0) out vec4 result;
void main()
{
result = io_color;
}
答
尝试增加输出和输入的布局预选赛你从一个着色器传递到其他的值,以确保它们实际上指向相同的位置:
VS:
layout (location = 0) out vec4 io_color;
个
FS:
layout (location = 0) in vec4 io_color;
我建议总是使用语法来连接着色室外及投入。
+0
虽然接口名称匹配在GLSL中是有效的。但是我想'glslangValidator'没有办法知道如何匹配接口,如果着色器是单独编译的话。 – krOoze
答
检查蓝色通道是否禁用颜色写入掩码。
请显示相关代码。 – BDL
添加了着色器代码 – user2065833
我认为接口必须完全匹配**。尝试将'io_uv'和'io_position2'作为'in'变量添加。 – krOoze