【问题标题】:GLSL struct uniform locations return -1GLSL 结构统一位置返回 -1
【发布时间】:2013-01-09 06:27:40
【问题描述】:

我正在尝试创建某种基本的照明系统。我已经设置了这个结构:

struct Light
{
  vec3 position;
  vec4 diffuse;
  vec4 ambient;
  bool enabled;
};

然后我定义了 4 个禁用的灯:

uniform Light light0 = Light(vec3(0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), false);
uniform Light light1 = Light(vec3(0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), false);
uniform Light light2 = Light(vec3(0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), false);
uniform Light light3 = Light(vec3(0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), vec4(0.0, 0.0, 0.0, 0.0), false);

在我的程序中,我试图获得统一的位置,这样我就可以改变灯光,所以我使用了这个代码。

int[][] lightLocs = new int[MAX_LIGHTS][4]; //Position, Diffuse, Ambient, Enabled
for(int i = 0; i < MAX_LIGHTS; i++) { //MAX_LIGHTS is set to 4
    lightLocs[i][0] = GL20.glGetUniformLocation(shaderProgram, "light"+i+".position");
    lightLocs[i][1] = GL20.glGetUniformLocation(shaderProgram, "light"+i+".diffuse");
    lightLocs[i][2] = GL20.glGetUniformLocation(shaderProgram, "light"+i+".ambient");
    lightLocs[i][3] = GL20.glGetUniformLocation(shaderProgram, "light"+i+".enabled");
    //Print locations just for bug testing
    for(int j = 0; j < 4; j++) {
        System.out.print(lightLocs[i][j] + ", ");
    }
    System.out.println();
}

但我得到了一些奇怪的结果。前 3 个灯 (0-2) 的所有 4 个位置都返回 -1。 light3 上的位置位置也返回 -1,但最后 3 个值返回 4、5 和 6。4、5 和 6 有意义,因为我在顶点着色器中的灯光之前定义了 4 个制服,但为什么我要其他位置得到-1?我也试过这个:

uniform Light light0;
uniform Light light1;
uniform Light light2;
uniform Light light3;

看看它是否会起作用,但是灯光的其余统一位置返回为 -1。

【问题讨论】:

    标签: java opengl glsl lwjgl


    【解决方案1】:

    着色器代码中未使用的 Uniform 通常会被优化掉。这些制服不被视为“活跃”,因此位置为 -1。

    【讨论】:

    • 稍后在我的代码中我调用Light[] lights = Light[4](light0, light1, light2, light3); 然后遍历它们。我只是尝试直接引用 1 盏灯,并且能够为其获得统一的位置,但如果我要添加更多灯,我不想为每个灯复制粘贴代码。有没有更好的方法来处理所有的灯而不优化它们?
    • @Unknownloner:为什么要将 4 个变量复制到一个数组中?为什么不把制服变成一个数组,然后不做任何复制呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多