Я хотел бы рассказать о некоторых вещах, которые, как я думаю, узнал, но я не уверен:
- VBOs - это путь. Они создаются с помощью
glGenBuffers
иglBufferData
. - Для максимальной гибкости лучше передать общие атрибуты вершин в шейдеры с
glVertexAttribPointer
, а неglVertex
,glNormal
и т.д. -
glDrawElements
может использоваться с буферами вершин и буфером индексов для эффективного рендеринга геометрии с большим количеством общих вершин, таких как ландшафтная сетка.
Предполагая, что все это правильно, вот мой вопрос. Все обучающие материалы, которые я прочитал о современном OpenGL, полностью опускают glEnableClientState
. Но man-страницы OpenGL говорят, что без glEnableClientState
, glDrawElements
ничего не сделает:
http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml
Ключевой проход: "Если GL_VERTEX_ARRAY
не включен, геометрические примитивы не создаются".
Это приводит меня к следующим вопросам:
- Ни один из руководств не использует
glEnableClientState
перед вызовомglDrawElements
. Означает ли это, что страница руководства неверна или устарела? -
GL_VERTEX_ARRAY
, похоже, будет тем, что вы включите, если вы собираетесь использоватьglVertexPointer
, а также использоватьGL_NORMAL_ARRAY
сglNormalPointer
и так далее. Но если я не использую эти функции и вместо этого использую общие атрибуты вершин сglVertexAttribPointer
, то зачем нужно включатьGL_VERTEX_ARRAY
?