Я хотел бы рассказать о некоторых вещах, которые, как я думаю, узнал, но я не уверен:
- 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?