Не удается установить одинаковое значение в шейдере OpenGL

В настоящее время я изучаю программирование OpenGL, и я добился определенного прогресса, но сейчас я застрял.

В настоящее время я пытаюсь заставить работать простые шейдеры. Чтобы быть более конкретным,Я пытаюсь установить единое значение шейдера, Шейдеры успешно компилируются и работают правильно, если я исключаю единообразное значение. Вот (вершинный) код шейдера:

#version 440 core

layout(location = 0) in vec3 vertex;

uniform mat4 mvp;

void main()
{
    gl_Position = mvp * vec4(vertex, 1);
}

И код, который я использую, чтобы установить значение (glGetUniformLocation возвращает 0, как и ожидалось):

mvp = glm::mat4(
    glm::vec4(3.0f, 0.0f, 0.0f, 0.0f),
    glm::vec4(0.0f, 1.0f, 0.0f, 0.0f),
    glm::vec4(0.0f, 0.0f, 1.0f, 0.0f),
    glm::vec4(0.0f, 0.0f, 0.0f, 2.0f)
);

GLuint matrix = glGetUniformLocation(program, "mvp");
glUniformMatrix4fv(matrix, 1, GL_FALSE, glm::value_ptr(mvp));

Проблема в том, что он, кажется, не устанавливает значение вообще. Если я запросить значение формы с помощьюglGetUniformfv, он возвращает значение по умолчанию (а не то, которое я только что установил), и геометрия вообще не отображается (но это всего лишь следствие, здесь проблема не в этом).

Если я жестко закодирую значение униформы в шейдере, приложение отображает геометрию правильно, и когда запрашивается значение (снова, используяglGetUniformfv), он возвращает правильное значение.

#version 440 core

layout(location = 0) in vec3 vertex;

uniform mat4 mvp = mat4(
    vec4(1.0f, 0.0f, 0.0f, 0.0f),
    vec4(0.0f, 1.0f, 0.0f, 0.0f),
    vec4(0.0f, 0.0f, 1.0f, 0.0f),
    vec4(0.0f, 0.0f, 0.0f, 2.0f)
);

void main()
{
    gl_Position = mvp * vec4(vertex, 1);
}

Есть идеи, почему это происходит? Я использую OpenGL 4.4, но я пробовал много разных версий с одинаковым результатом.

Спасибо за ваше время и усилия,
Levente

Ответы на вопрос(1)

Ваш ответ на вопрос