Есть еще одна опция, которая немного похожа на опцию 3 - использовать одно большое VBO (возможно, в режиме GL_STREAM_DRAW
), которое сбрасывает каждый кадр (вызывая glBufferData
с указателем буфера NULL
и таким же размером каждый раз) затем glMapBuffer
-ed сразу. Буфер остается отображенным, как он заполнен, затем не отображен непосредственно перед рисованием. Повторите.
Вызов glBufferData
сообщает OpenGL, что старое содержимое буфера не нужно, поэтому glMapBuffer
потенциально не нужно ждать, чтобы убедиться, что GPU завершен с помощью GPU.
Похоже, что этот подход официально одобрен расширением vertex_buffer_object
. См. Пример «Массивы вершин, использующие сопоставленный буферный объект»:
http://www.opengl.org/registry/specs/ARB/vertex_buffer_object.txt
Это говорит о том, что OpenGL (или драйвер?) Будет следить за такого рода поведением и (при обнаружении) упорядочивать вещи так, чтобы оно выполнялось эффективно.