2017-02-13 3 views
-2

Ich bin bei der Programmierung meiner 3D-Engine stecken. Ich habe viele Shader arbeiten lassen und habe gerade einen neuen erstellt. Aber aus irgendeinem Grund zeigen meine Uniformvariablen ein merkwürdiges Verhalten.Uniform in GLSL verschwindet

Ich weiß, dass, wenn Uniformen sind die Lage dieser Variablen nicht verwendet wird auf -1 gesetzt werden. Aber ich weiß, dass meine Uniform benutzt wird. Das ist, was ich atm habe. (Das Shader macht keinen Sinn, aber es sollte immer noch funktionieren)

Vertex Shader:

#version 150 

in vec3 position; 
in vec2 texCoords; 

out mat4 hilf; 

uniform mat4 projectionMatrix; 
uniform mat4 viewMatrix; 

uniform float radius; 

void main(void){ 
    hilf = projectionMatrix; 
    gl_Position = projectionMatrix * vec4(position,1.0); 
} 

die Lage der "Radius" auf -1 (weil es nicht verwendet wird). Das Gleiche gilt für die Viewmatrix. Aber mein Standort meiner "projectionMatrix" ist auch auf -1 gesetzt! Das macht keinen Sinn für mich. Jetzt kommt der seltsamste Teil; Wenn ich die Zeile entferne: gl_Position = projectionMatrix * vec4(position,1.0);, wird die Projektionsmatrix eine Position größer als -1 haben.

Mein Java Aufruf sieht wie folgt aus:

location_projectionMatrix = super.getUniformLocation("projectionMatrix"); 
location_viewMatrix = super.getUniformLocation("viewMatrix"); 
location_radius = super.getUniformLocation("radius"); 

//----------------- 
protected int getUniformLocation(String uniformName){ 
    return GL20.glGetUniformLocation(programID, uniformName); 
} 

Ist das ein Fehler? Habe ich etwas vergessen? Was geht hier vor sich?

+0

Zeigen Sie auch Ihren OpenGL-Code. – eldo

+2

Ohne Ihren Set/Get Location Code ist dies nur eine Vermutung: Sie versuchen, etwas (z. B. den gleichen Ort) zweimal einzustellen. – Ripi2

Antwort

0

Da Sie nicht die Variable radius verwenden, wird beim Kompilieren des Shaders diese weggelassen (optimiert). Daher enthält der Shader nach der Kompilierung diese Variable nicht. Aus diesem Grund ist der Standort auf den ungültigen Wert -1 eingestellt.

Verwenden Sie den Radius in Ihrem Shader innerhalb der main-Funktion und es wird ein gültiger Standortwert zurückgegeben.