C++ 将顶点位置从顶点传递到片段着色器-仅在使用Nsight调试时有效
我试图将顶点位置作为一个简单的C++ 将顶点位置从顶点传递到片段着色器-仅在使用Nsight调试时有效,c++,opengl,glsl,shader,nsight,C++,Opengl,Glsl,Shader,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 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);
}
现在,只有当我在VisualStudio2019中使用Nsight图形调试器运行程序时,这才起作用
当我正常执行(x64,Debug)时,它似乎返回到默认着色器,该着色器将所有内容渲染为白色。上面发布的顶点和片段着色器停止工作。顶点着色器输出的类型必须与下一个着色器阶段(本例中为片段着色器)中相应输入的类型完全匹配。
看 在您的情况下,顶点着色器输出的类型为
vec3
:
out-vec3位置;
但是片段着色器输入的类型是vec4
:
vec4 pos中的;
将片段着色器输入的类型更改为vec3
,以解决此问题
我不知道为什么这段代码可以在VisualStudio2019中使用Nsight图形调试器。错误在于它不应该这样做。编译和链接着色器时,应该始终检查错误。