После отрисовки полигонов вы отключаете атрибуты вершин (glDisableVertexAttribArray
), но не включаете их снова, перед рисованием линий.
Пропустите отключение атрибутов вершин после прорисовки полигонов, чтобы решить проблему.
Кроме того, функция глубины по умолчанию (glDepthFunc
) - GL_LESS
. Если проверка глубины включена, то фрагмент отбрасывается, если фрагмент был нарисован в той же позиции, чья глубина (координата z) меньше или равна глубине нового фрагмента. Это означает, что фрагмент покрыт предыдущим.
Если вы хотите, чтобы линии всегда рисовались поверх полигонов, то перед рисованием линий вы должны отключить тест глубины.
// clear color buffer and depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// enable the depth test
glEnable(GL_DEPTH_TEST);
// enable vertex attributes
glEnableVertexAttribArray(posAttribute);
glEnableVertexAttribArray(colAttribute);
// draw the polygons
GLfloat vertices[] = { 0.0f, 0.707f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f };
GLfloat colors[] = { 1.f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f};
shader->setAttributeArray(posAttribute, vertices, 3, 0);
shader->setAttributeArray(colAttribute, colors, 3, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
// disable the depth test
glDisable(GL_DEPTH_TEST);
// draw the lines
GLfloat lvertices[] = { 0.907f, 0.907f, 0.5f, -0.957f, -0.957f, 0.5f };
GLfloat lcolors[] = { 1.0f, 0.0f, 0.0f, 1.0f, .0f , 0.0f};
shader->setAttributeArray(posAttribute, lvertices, 3, 0);
shader->setAttributeArray(colAttribute, lcolors, 3, 0);
glDrawArrays(GL_LINE_STRIP, 0, 6);
// disable vertex attributes
glDisableVertexAttribArray(posAttribute);
glDisableVertexAttribArray(colAttribute);