2017-12-27 937 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