Если вам нужно обновлять буфер (ы) каждого кадра, вам следует использовать GL_STREAM_DRAW (который намекает на то, что содержимое буфера, скорее всего, будет использовано только один раз), а не GL_DYNAMIC_DRAW (который намекает на то, что они будут использованы, но использовались пару раз дообновляется).Насколько мне известно, буферы, созданные с помощью GL_STREAM_DRAW, будут обрабатываться аналогично обычным старым массивам, поэтому при его использовании следует ожидать примерно такой же производительности, что и для массивов.
Также убедитесь, что вы вызываете glMapBuffer сдля параметра доступа установлено значение GL_WRITE_ONLY, при условии, что вам не нужно читать содержимое буфера.В противном случае, если буфер находится в видеопамяти, он должен быть перенесен из видеопамяти в основную память, а затем обратно (ну, на самом деле, это зависит от драйвера ...) для каждого вызова карты.Передача большого объема данных по шине - очень реальное узкое место, в которое довольно легко попасть.