Неправильное обновления uniform buffer
У меня есть юниформ буффер в шейдерах, который выглядит так:
layout (std140) uniform transform {
mat4 projection;
mat4 cam;
bool enabledCam;
};
В последствии, я использую переменную, чтоб определить надо ли применять матрицу камеры к объекту:
if (enabledCam) {
gl_Position = projection * cam * model * vec4(pos, 1.0f);
} else {
gl_Position = projection * model * vec4(pos, 1.0f);
}
До тех пор пока "enabledCam" была просто uniform переменной всё работало, но как перенёс в буффер не работает как надо. Обновляю переменную в коде так:
glBindBuffer(GL_UNIFORM_BUFFER, bufferID);
ByteBuffer bf = BufferUtils.createByteBuffer(4);
bf.putInt(enabledCam ? 1 : 0);
bf.flip();
glBufferSubData(GL_UNIFORM_BUFFER, 128, bf);
Инициализация буффера:
int blockID = glGetUniformBlockIndex(programId, "transform");
if (blockID != -1) {
GL31.glUniformBlockBinding(programId, blockID, 0);
bufferID = glGenBuffers();
glBindBuffer(GL_UNIFORM_BUFFER, bufferID);
glBufferData(GL_UNIFORM_BUFFER, 132, GL_STATIC_DRAW);
GL30.glBindBufferBase(GL_UNIFORM_BUFFER, 0, bufferID);
}
Она, вроде и обновляется, но не для каждого объекта. Если для всех стоит false - то тогда в шейдере false, если для всех - true - то и в шейдере true, несмотря на то, что я через glMapBuffer проверял значения, они правильные. Этот метод, по обновлению буффера я вызываю перед отрисовкой каждого объекта. Две другие переменные при этом обновляются без проблем.