在此配置文件中无法访问gl_Position?

Blu*_*ips 2 c opengl glew glsl glfw

尝试使用GLFW / GLEW在C / C ++中编译GLSL着色器时,出现以下错误:

0(12) : error C5052: gl_Position is not accessible in this profile
Run Code Online (Sandbox Code Playgroud)

我遵循了Learnopengl.com的教程。该代码运行并显示一个空白的正方形,上面的错误消息被打印到命令行。有什么想法发生了什么以及如何解决?

片段着色器是:

#version 410 

layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
layout (location = 2) in vec2 aTexCoord;

out vec3 ourColor;
out vec2 TexCoord;

void main()
{
    gl_Position = vec4(aPos, 1.0);
    ourColor = aColor;
    TexCoord = aTexCoord;
}
Run Code Online (Sandbox Code Playgroud)

顶点着色器是:

#version 410 

out vec4 FragColor;

in vec3 ourColor;
in vec2 TexCoord;

uniform sampler2D ourTexture;

void main()
{
    FragColor = texture(ourTexture, TexCoord);
}
Run Code Online (Sandbox Code Playgroud)

如果您想查看其余的代码,请参考上面的教程链接。

pea*_*iac 7

看起来您试图将片段着色器加载为顶点着色器,反之亦然。gl_Position由于它是每个顶点属性,因此只能在顶点着色器中设置。尽管以正确的顺序加载着色器应该可以解决该问题。

  • 如果您从文件加载着色器,请确保也加载正确的着色器。我尝试从我的顶点着色器文件加载片段着色器并最终到达这里:D (4认同)
  • 废除“封闭”的一个原因是——我遇到了这个确切的问题,这个问题直接引导我找到了解决方案。 (2认同)