glDraw* возвращает GL_INVALID_ENUM
Я пытаюсь визуализировать некоторые объекты в OpenGL, но хотя я вызываю glDrawElements
с правильным режимом, он все еще дает мне GL_INVALID_ENUM
, Это журнал вызовов, записанный AMD CodeXL, от настройки до рендеринга:
glBindVertexArray(1)
... creating shaders/programs and getting uniform locations ...
# the vertex buffer
glGenBuffers(1, 0x008A945C)
glBindBuffer(GL_ARRAY_BUFFER, 1)
glBufferData(GL_ARRAY_BUFFER, 96, 0x008A94A0, GL_STATIC_DRAW)
# the element index buffer
glGenBuffers(1, 0x008A9460)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 2)
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 96, 0x008A9508, GL_STATIC_DRAW)
glClearColor(0.12, 0.63999999, 0.55000001, 1)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glEnableVertexAttribArray(0)
glUseProgram(1)
glUniformMatrix4fv(0, 1, FALSE, ... MVP Matrix ...)
glBindBuffer(GL_ARRAY_BUFFER, 1)
glVertexAttribPointer(0, 3, GL_FLOAT, FALSE, 0, 0x00000000)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 2)
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, 0x00000000) # GL_INVALID_ENUM here <----
glUseProgram(0)
glDisableVertexAttribArray(0)
wglSwapBuffers(0x09011214)
Я уже пытался обменяться glDrawElements
от glDrawArrays(GL_QUADS, 0, 4)
(с правильными параметрами), и это все еще дает мне ту же ошибку. Что может быть причиной этого? Кажется, CodeXL уверен, что ошибка возникает именно при вызове отрисовки, а не раньше.
1 ответ
Решение
Это потому GL_QUADS
устарел в OpenGL 3, см. документацию для glDrawArrays
,
Вы также можете:
- Нарисуйте треугольники (рекомендуется).
- Создайте свой контекст opengl, используя профиль совместимости. (Как это сделать, зависит от того, что вы используете для создания контекста, SDL, glfw и т. Д.)