将矩阵传递给glsl只是不起作用?

Wir*_*rde 5 opengl glsl lwjgl

我目前正在使用lwjgl和编程glsl 1.20.

这是尝试将4x4浮点矩阵发送到着色器的代码如下所示:

    int normalMatrixLocation = ARBShaderObjects.glGetUniformLocationARB(handlers.ShaderHandler.get().getShader("sphere"), "normalMatrix");
    tempFloatBuffer = BufferUtils.createFloatBuffer(16);
    tempFloatBuffer.put(helpers.Matrix.doubleToFloat4x4(normalMatrix.getArray()));
    tempFloatBuffer.rewind();
    ARBShaderObjects.glUniformMatrix4ARB(normalMatrixLocation, false, tempFloatBuffer);
Run Code Online (Sandbox Code Playgroud)

辅助函数看起来像这样:

    public static float[] doubleToFloat4x4(double[][] dArray) {
        float[] newFloat = new float[16];
        for(int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                newFloat[j+4*i] = (float)dArray[i][j];
            }
        }
        return newFloat;
    }
Run Code Online (Sandbox Code Playgroud)

在着色器中我有以下内容,以便我可以使用它在着色器中使用不同的功能:

uniform mat4 normalMatrix;
Run Code Online (Sandbox Code Playgroud)

虽然这种制服总是空的4x4矩阵......

我究竟做错了什么?

Jay*_*Jay 0

glUniform 函数影响当前程序。确保在调用 glUniform 之前调用 glUseProgramARB(myProgramObj)。