Я сейчас использую 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);
Вспомогательная функция выглядит следующим образом:
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;
}
И в шейдере у меня есть следующее, так что я смогу использовать его для шейдеров различных функций:
uniform mat4 normalMatrix;
Хотя эта униформавсегда пустая матрица 4x4 ...
Что я делаю не так?