Не удается установить одинаковое значение в шейдере 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