Ответ 1
Документация Apple, по-видимому, рекомендует VBOs во всех ситуациях. Если вы используете ES 2.x, то тип буфера вершин GL_STREAM_DRAW явно указывается для "когда вашему приложению необходимо создать временную геометрию, которая отображается небольшим числом раз, а затем отбрасывается. Это наиболее полезно, когда ваше приложение должно динамически изменять вершину данных каждый кадр таким образом, который не может быть выполнен в вершинном шейдере". Использование glBufferSubData затем прямо защищается.
Логически, я полагаю, что единственное различие между подачей данных полностью заново и отправкой в существующий буфер GL_STREAM_DRAW или GL_DYNAMIC_DRAW заключается в том, что ваше пространство на карте памяти (GPU или CPU, в зависимости от микросхемы - MBX действительно не делают VBOs, но Apple поддерживает их по другим причинам производительности) могут быть выделены один раз, а не выделены и выпущены каждый кадр.
Использование советов выравнивания и упаковки, приведенных в этом документе, скорее всего, даст лучшее улучшение, чем переход на VBOs, так как в противном случае CPU просто должен распаковать и переупаковать данные на glDrawElements. Хотя, вероятно, вы уже знаете об этом, и я ценю, что это не является прямой частью вопроса - я в основном бросаю его в качестве сравнительного предположения о преимуществах производительности.