2017-12-27 30 views
0

Meine Anwendung mich diese Nachricht gesendet, wenn ich versuchte, einen GLSL3.3 ShaderFROH, Erweiterungen nicht geladen

#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. 

Also ging ich zurück zu laufen und hinzugefügt die Erweiterung des FROH Generator: Sie können meine sehen Wahlen unten!
http://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3&extensions=GL_ARB_explicit_uniform_location

Danach habe ich meine glad.c und glad.h Dateien zurück in meine Datei und erstellt ... und zu meiner Überraschung Kopie kleisterte, bekam ich den gleichen Fehler! (KHR.h-Datei nicht enthalten)

Was mache ich falsch?

Antwort

5

Das hat nichts mit GLAD zu tun. Es hat alles damit zu tun, wie Erweiterungen in GLSL funktionieren.

In OpenGL, Extensions einfach existieren; Ihre Implementierung bietet sie und sie haben Auswirkungen, ob Sie sie explizit verwenden oder nicht. Unabhängig davon, ob Sie einen Erweiterungslader verwenden oder nicht, bietet die Implementierung immer noch ihre Funktionalität.

Aber in GLSL, so funktioniert es nicht. Wenn Sie #version 330 core sagen, sagen Sie, dass der folgende Text an die OpenGL-Schattierungssprache gemäß Definition in Version 3.30 der Spezifikation gebunden ist. Genau und nur diese Sprache.

In GLSL 3.30 können keine einheitlichen Standorte im Shader angegeben werden. Dazu müssen Sie entweder GLSL Version 4.30 oder die Erweiterung ARB_explicit_uniform_location verwenden.

In GLSL, Erweiterungen gelten nur für die Sprache, wenn Sie explizit nach ihnen fragen. Da Sie nicht nach der Erweiterung ARB_explicit_uniform_location gefragt haben, gelten ihre grammatischen Änderungen nicht für Ihren Shader. Daher der Kompilierungsfehler.

Wenn Sie ein Shader wollen eine Erweiterung verwenden, müssen Sie specify it explicitly with a #extension declaration:

#extension GL_ARB_explicit_uniform_location : require 

Dies sollte nach Ihrer #version Erklärung kommen, aber vor jede tatsächliche GLSL Text.

+0

Sie haben den Doppelpunkt vergessen, auch das Hinzufügen der richtigen Zeile fordert mich mit einem, Fehler: Erweiterung 'ARB_explicit_uniform_location 'im Vertex-Shader nicht unterstützt – Whiteclaws

Verwandte Themen