2017-12-27 839 views
0

我的应用程序给我发了这条消息时,我试图运行GLSL3.3着色器庆幸,扩展没有被加载

#version 330 
layout(location = 0) in vec2 position; 
layout(location = 1) uniform float TimeUniform = 0.0f; 
out float TimeUniformFrag; 
void main() { 
    gl_Position = vec4(position.x - 1.0f, position.y - 1.0f, 0.0f, 1.0f); 
    TimeUniformFrag = TimeUniform; 
} 
... 
Vertex Shader: 0:3(1): error: uniform explicit location requires GL_ARB_explicit_uniform_location and either GL_ARB_explicit_attrib_location or GLSL 3.30. 

等我回去,并添加所述扩展到GLAD发生器: 你可以看到我下面的选择!
http://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3&extensions=GL_ARB_explicit_uniform_location

之后,我复制粘贴我glad.c和glad.h文件放回到我的文件和编译......让我吃惊,我得到了同样的错误! (不包括KHR.h文件)

我在做什么错?

回答

5

这与GLAD无关。它与扩展在GLSL中的工作方式有关。

在OpenGL中,扩展只需存在;你的实现提供了它们,并且它们有效果,无论你是否明确地使用它们。无论您是否使用扩展加载器,实现仍然提供其功能。

但是在GLSL中,这不是它的工作原理。当您说#version 330 core时,您说的是以下文本形成OpenGL着色语言,如规范3.30版所定义。正好和只有那种语言。

GLSL 3.30不允许在着色器中指定统一的位置。为此,您必须使用GLSL版本4.30或ARB_explicit_uniform_location扩展。

在GLSL中,扩展名仅适用于您在明确要求的语言。由于您没有要求提供ARB_explicit_uniform_location扩展名,因此其语法更改不适用于您的着色器。因此编译错误。

如果你想有一个着色器使用扩展,你必须specify it explicitly with a #extension declaration

#extension GL_ARB_explicit_uniform_location : require 

这应该是你的#version声明之后,但之前任何实际GLSL文本。

+0

您忘记了冒号,并且添加了正确的行,提示我在顶点着色器中不支持error:扩展名“ARB_explicit_uniform_location” – Whiteclaws