在Vulkan中,我编写了一个简单的程序来绘制具有固定颜色的线条,使用简单的顶点着色器和fragement着色器。但是输入到片段着色器的颜色与顶点中设置的颜色不同。我用RenderDoc检查过,传递给顶点着色器的颜色对于一条线的两个顶点都是正确的(1,1,1,1)并且还检查了它的输出,它也是相同的。但在Fragment着色器中,我得到的颜色是(1,1,0,1)。不明白为什么会这样。无法忽略顶点着色器发出的颜色,片段着色器中的输入始终为黄色。
顶点着色器:
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;
}
答案 0 :(得分:0)
尝试将输出和输入布局限定符添加到从一个着色器传递到另一个着色器的值,以确保它们实际指向同一位置:
VS
layout (location = 0) out vec4 io_color;
FS
layout (location = 0) in vec4 io_color;
我建议始终使用该语法连接着色器输出和输入。
答案 1 :(得分:0)
检查蓝色通道是否未禁用彩色写入掩码。