将顶点位置从顶点传递到片段着色器 - 仅在使用 Nsight 调试时有效
Passing vertex position from vertex to fragment shader - only works when debugging with Nsight
我正在尝试将顶点位置作为简单的 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 图形调试器的程序。
当我正常执行(x64,调试)时,它似乎退回到默认着色器,它将所有内容渲染为白色。上面发布的顶点和片段着色器停止工作。
顶点着色器输出的类型必须与下一着色器阶段(在本例中为片段着色器)中相应输入的类型完全匹配。
参见 interface matching rules between shader stages.
在您的例子中,顶点着色器输出的类型是 vec3
:
out vec3 pos;
但是片段着色器输入的类型是vec4
:
in vec4 pos;
将片段着色器输入的类型更改为vec3
,以解决问题。
我不知道为什么这段代码在 Visual Studio 2019 中与 Nsight 图形调试器一起工作。错误是它不应该这样做。
我正在尝试将顶点位置作为简单的 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 图形调试器的程序。
当我正常执行(x64,调试)时,它似乎退回到默认着色器,它将所有内容渲染为白色。上面发布的顶点和片段着色器停止工作。
顶点着色器输出的类型必须与下一着色器阶段(在本例中为片段着色器)中相应输入的类型完全匹配。
参见 interface matching rules between shader stages.
在您的例子中,顶点着色器输出的类型是 vec3
:
out vec3 pos;
但是片段着色器输入的类型是vec4
:
in vec4 pos;
将片段着色器输入的类型更改为vec3
,以解决问题。
我不知道为什么这段代码在 Visual Studio 2019 中与 Nsight 图形调试器一起工作。错误是它不应该这样做。