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,

Вы также можете:

  1. Нарисуйте треугольники (рекомендуется).
  2. Создайте свой контекст opengl, используя профиль совместимости. (Как это сделать, зависит от того, что вы используете для создания контекста, SDL, glfw и т. Д.)
Другие вопросы по тегам