Возвращаясь к этому вопросу через несколько лет, ландшафт немного изменился с появлением новых версий и расширений.
Копирование на GPU
Расширение, упомянутое в ответе Кристиана Рау, является основным начиная с версии 3.1, что позволяет нам копировать содержимое (через glCopyBufferSubData ) из одного VBO в другое. Надеюсь, драйвер сделает это на стороне графического процессора!
Используя эту функцию, мы могли бы создать больший буфер и скопировать начальные данные. Недостатком этого является удвоение требований к памяти, поскольку нам нужны оба буфера.
Истинное изменение размера
Хорошая новость: с разреженными буферами на горизонте еще лучшее решение.
Учитывая это расширение, мы можем выделить виртуальный буфер с более чем достаточным пространством для наших данных, даже не заплатив за ненужное пространство. Нам нужно только «зафиксировать» те области памяти, в которых мы физически хотим хранить данные. Это означает, что мы можем «увеличить» VBO, фиксируя новые страницы в конце.
Плохая новость: в текущей версии OpenGL (4.5) это все еще расширение, а не ядро, поэтому принятие этого может быть невозможным. Не следует также указывать, что в спецификации есть некоторые детали, которые еще не разработаны. Например, отображение разреженных буферов запрещено в текущем расширении, но поддержка может быть добавлена в будущих версиях.
Я бы хотел услышать о наличии этого расширения, если у вас есть какие-либо данные об этом.