【问题标题】:In Vulkan, the output color of vertices in vertex shader is different than what I am getting in fragment shader在 Vulkan 中,顶点着色器中顶点的输出颜色与我在片段着色器中得到的颜色不同
【发布时间】:2017-09-19 09:34:46
【问题描述】:

在 Vulkan 中,我编写了一个简单的程序来绘制固定颜色的线条,使用简单的顶点着色器和片段着色器。但是输入到片段着色器的颜色与在顶点中设置的颜色不同。我检查了 RenderDoc,传递给顶点着色器的颜色对于一条线的两个顶点都是正确的 (1,1,1,1),并且还检查了它的输出,它也一样。但在片段着色器中,我得到的颜色是 (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;
}

//分片:

in vec4 io_color;

layout(location = 0) out vec4 result;

void main ()
{
    result = io_color;
}

【问题讨论】:

  • 请出示相关代码。
  • 添加了着色器代码
  • 我认为接口必须完全匹配。也可以尝试将io_uvio_position2 添加为in 变量。

标签: vulkan


【解决方案1】:

尝试将输出和输入布局限定符添加到从一个着色器传递到另一个着色器的值,以确保它们实际上指向同一位置:

VS:

layout (location = 0) out vec4 io_color;  

FS:

layout (location = 0) in vec4 io_color;

我建议始终使用该语法来连接着色器输出和输入。

【讨论】:

  • 接口名称匹配在 GLSL 中是有效的。但是我想glslangValidator没有办法知道如何匹配接口,如果着色器是单独编译的。
【解决方案2】:

检查是否没有为蓝色通道禁用颜色写入掩码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多