Я запрограммировал приложение OpenGL с окном SDL. Основной профиль работает с OpenGL 4.1 на Mac OSX 10.9. Команда glClearColor
отлично работает, и я получаю правильный цвет на экране. Но внутри моего рендеринга я получил ошибку GL_INVALID_OPERATION
каждый раз, когда выполняю команды glEnableVertexAttribArray
и glDrawArrays
.OSX OpenGL 4.1 glEnableVertexAttribArray glDrawArrays GL_INVALID_OPERATION
Вот код:
Vertex Shader:
#version 410
in vec4 position;
void main(void)
{
gl_Position = position;
}
Фрагмент Shader:
#version 410
out vec4 out_Color;
void main(void)
{
out_Color = vec4(0.0, 1.0, 0.0, 1.0);
}
Все шейдер компилировать и связан с программой. Ошибка связывания!
Создание буфера с данными:
static const float VertexBufferData[] = {
0.75f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
-0.75f, -0.75f, 0.0f, 1.0f,
};
glGenBuffers(1, &m_VertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(VertexBufferData), VertexBufferData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
Рендер:
glUseProgram(m_ShaderProgram);
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
// glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, nullptr);
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glUseProgram(0);
Выход:
Насколько я знаю, рисунок без активного VAO не допускается в Основной профиль. Попробуйте создать vao и привязать его до glBindBuffer. – BDL
Хорошо. Это была проблема. Немного странно, на мой взгляд. Зачем мне ВАО ... Я должен снова прочитать основы. :-) –
Если вы явно не создаете и не привязаете VAO, вы просто будете использовать VAO по умолчанию (0). Использование любого типа объектов по умолчанию больше не разрешается в основном профиле. Из спецификации в разделе «Устаревшие и удаленные функции»: «Объект вершинного массива по умолчанию (имя ноль) также устарел.« –