从顶点着色器到片段着色器传递顶点位置-只有在使用Nsight调试时才有效。

3

我正在尝试通过在顶点着色器中使用简单的out vec3 pos将顶点位置传递到片元着色器,以便根据它们的位置为顶点上色。这是我的顶点着色器代码:

#version 330 core

in vec3 position;
out vec3 pos;

uniform mat4 u_model;


void main(){
    pos = position;
    gl_Position = u_model * vec4(position, 1.0f);
}

片段着色器:

#version 330 core

out vec4 color;
in vec4 pos;

void main(){

    color = vec4(pos.x, 0.0f, 0.0f, 1.0f);
}

现在这只能在我使用Visual Studio 2019中的Nsight Graphics Debugger运行程序时才能工作。

当我正常执行(x64,Debug)时,它似乎会回退到默认着色器,将所有东西渲染为白色。上面发布的顶点和片段着色器停止工作。


编译和链接着色器时,您应始终检查错误。 - Nicol Bolas
1个回答

1
顶点着色器输出的类型必须与下一个着色器阶段(在本例中为片元着色器)对应输入的类型完全匹配。
请参见 着色器阶段之间接口匹配规则。 在您的情况下,顶点着色器输出的类型是vec3
out vec3 pos;

但片段着色器输入的类型是 vec4

in vec4 pos;

将片段着色器输入类型更改为vec3,以解决该问题。

我不知道为什么这段代码在Visual Studio 2019的Nsight Graphics Debugger中能够运行。问题是它不应该这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接