GLSL中的制服消失了

时间:2017-02-13 16:54:12

标签: java opengl glsl

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

我知道如果不使用制服,该变量的位置将设置为-1。但我知道我的制服正在被使用。这就是我得到的。 (那个着色器毫无意义,但它应该仍然有用)

顶点着色器:

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

这是一个错误吗?我错过了什么吗?这是怎么回事?

1 个答案:

答案 0 :(得分:0)

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

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