У меня есть этот пример кода
// EBO is just a rectangle
// copypasted from learnopengl
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glUniform1f(glGetUniformLocation(shaderId, shiftName), 0); //shiftName is string "shift"
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glUniform1f(glGetUniformLocation(shaderId, shiftName), 0.5);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glFlush();
SDL_GL_SwapWindow(window);
Шейдеры, которые у меня есть:
Вершина:
#version 330 core
layout (location = 0) in vec3 pos;
out vec4 vertexColor;
uniform float shift = 0;
void main()
{
gl_Position = vec4(pos.x, pos.y - shift, pos.z, 1.0);
vertexColor = vec4(0, shift, 0, 1.0);
}
Фрагмент:
#version 330 core
out vec4 FragColor;
in vec4 vertexColor;
void main()
{
FragColor = vertexColor;
}
В моем понимании Я должен получить два прямоугольника, один под другим, с двумя цветами, для каждого вызова glDraw. Но вместо этого я получаю один прямоугольник для второго рисования.
Я предполагаю, что оба вызова рисования на самом деле рисуют меня одним и тем же прямоугольником. Но я явно не понимаю, почему.
Я попытался выполнить промывку между ними, создать второй буфер, glUseProgram между ними и т. Д. c.
Вы можете увидеть полный код здесь