Java GLSL中的一致性消失

Java GLSL中的一致性消失,java,opengl,glsl,Java,Opengl,Glsl,我被困在编程我的3D引擎。我有很多着色器在工作,我刚刚创建了一个新的着色器。但出于某种原因,我的统一变量表现出一种奇怪的行为 我知道如果不使用制服,该变量的位置将设置为-1。但我知道我的制服正在被使用。这是我在atm机上得到的。(该着色器毫无意义,但仍应工作) 顶点着色器: #version 150 in vec3 position; in vec2 texCoords; out mat4 hilf; uniform mat4 projectionMatrix; uniform mat4

我被困在编程我的3D引擎。我有很多着色器在工作,我刚刚创建了一个新的着色器。但出于某种原因,我的统一变量表现出一种奇怪的行为

我知道如果不使用制服,该变量的位置将设置为-1。但我知道我的制服正在被使用。这是我在atm机上得到的。(该着色器毫无意义,但仍应工作)

顶点着色器:

#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);
}
“radius”的位置设置为-1(因为未使用它)。viewmatrix也是如此。但是我的“projectionMatrix”的位置也设置为-1!那对我来说毫无意义。现在是最奇怪的部分;当我删除该行时:
gl_Position=projectionMatrix*vec4(Position,1.0),投影矩阵的位置将大于-1

我的Java调用如下所示:

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);
}

这是虫子吗?我错过什么了吗?这是怎么回事?

由于您没有使用变量
radius
,因此在编译着色器时,它会被忽略(优化)。因此,编译后的着色器不包含该变量。这就是为什么该位置被设置为无效值
-1


main
函数中使用着色器中的半径,它将返回一个有效的位置值。

还将显示您的opengl代码。如果没有设置/获取位置代码,这只是一个猜测:您正在尝试两次设置某物(例如,相同位置)。