Обновление данных вершин в VBO (glBufferSubData vs glMapBuffer)

Я хочу обновить список объектов из вершин после создания VBO. Я видел как glBufferSubData и glMapBuffer и оба они, похоже, делают похожие вещи, а это значит, что я теперь не уверен, какой из них использовать.

Мой псевдо-рабочий процесс:

Создать объект
Начать обновление вершин (вызывает glBufferData с данными = nullptr)
Обновить вершины объектов
End vertex update (принимает обновленные вершины и вызывает вызовы glBufferSubData или glMapBuffer)

Ответ 1

Оба работают.

Если вы намерены часто обновлять вершины (каждый кадр или около того), я рекомендую избегать glBufferSubData, для чего требуется еще одна memcpy в драйвере. glMapBuffer/glMapBufferRange обычно дает вам больше возможностей.

Если вы обновляете только редко, glBufferSubData будет работать нормально.

См. Также главу 28 OpenGL Insights (бесплатно: http://openglinsights.com/)