Неправильное обновления 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 проверял значения, они правильные. Этот метод, по обновлению буффера я вызываю перед отрисовкой каждого объекта. Две другие переменные при этом обновляются без проблем.


Ответы (0 шт):