Каков наиболее эффективный способ выделения / обновления VBO в этом контексте?Я почти уверен, что должен использовать DYNAMIC_DRAW и bufferSubData для обновления каждого объекта.
Это действительно путь.На самом деле вы хотите использовать двойную или даже тройную буферизацию для ваших объектов, то есть иметь один VBO, привязанный для рисования, в то время как вы обновляете содержимое другого новыми данными.После glMapBuffer карта памяти может быть доступна из всех потоков процесса, поэтому вы можете иметь рабочий поток, обновляющий буфер вершин «назад», пока поток рендеринга занят рисованием текущего кадра.
Или это слишком мало с точки зрения объема памяти, о котором я слишком много думаю?
Вы оценили наихудший случай памяти, с которым вы сталкиваетесь?Учитывая ваши числа, я уверен, что он будет ниже 16 МБ (150 объектов * 2048 точек * 3 поплавка двойной точности на точку * 8 байт на удвоение = 7,4 МБ, только 3,7 МБ, если используются поплавки одинарной точности).Сравните это с несколькими сотнями мегабайт оперативной памяти, которые предлагают современные видеокарты (у моей GeForce 8800GTX 2006 года 768 Мб оперативной памяти, а у Radeon HD6570 - 1024 Мб (= 1 Гб).