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