Чтобы обновить мои однородные объекты буфера, я использую glBufferSubData
. Быстрее ли использовать glBufferSubData
или glMapBuffer
с glUnmapBuffer
?Это лучше glBufferSubData или glMapBuffer
ответ
Хорошо, что вам не нужно копировать данные сначала в массив, а затем использовать glBufferSubData
, чтобы заполнить буфер opengl. С glMapBuffer
вы можете скопировать данные непосредственно в часть памяти, которую opengl будет извлекать на GPU, когда это необходимо. С моей точки зрения, там glMapBuffer
должен быть быстрее, если вы хотите заполнить большой буфер, который будет часто обновляться. Также важно, как вы копируете данные в буфер между glMapBuffer
и glUnmapBuffer
.
Если вы указали нам код, который используете glMapBuffer
и насколько велики данные, тогда мы можем судить об этом проще. Во всяком случае, в конце измерения могут показать вам, какой из них лучше.
ОБНОВЛЕНИЕ:OpenGL Insight Asynchronous Buffer Transfer Chapter. В этой главе могут быть интересны функции implicit synchronization
функций и glSubBufferData
.
Даже с 'glMapBuffer' копирует данные в массив памяти процессора. Разница лишь в том, что 'glBufferSubData' использует выделенный пользователем массив, а с помощью' glMapBuffer' драйвер выделяет его. – BDL
@BDL Именно это я и имел в виду. «вы можете скопировать данные непосредственно в часть памяти, которую opengl будет извлекать на GPU, когда это необходимо». по памяти я имел в виду системную память, а не память GPU. OpenGL всегда создает буферы в системной памяти и извлекает данные на GPU, когда это необходимо. – mmostajab
Но вывод неверен: при копировании большого сегмента памяти в gpu 'glMapBuffer' вам необходимо скопировать данные из его исходного местоположения в отображаемую память процессора (которая уже может быть медленной). Затем сопоставленная память копируется в gpu. С помощью 'glBufferSubData' исходная память может быть скопирована непосредственно в gpu. – BDL
- 1. glMapBuffer отсутствует в opengl es 2
- 2. Это лучше? $ (document) или $ ('document')
- 3. Это лучше или нет, чем это содержит?
- 4. Почему glMapBuffer возвращает NULL?
- 5. glBufferSubData для изменения цвета
- 6. GL_INVALID_ENUM с glMapBuffer()
- 7. Преимущество использования glMapBuffer
- 8. Лучше ли связывать это или использовать переменную?
- 9. Что лучше, или это просто для презентации?
- 10. Альтернатива phpUnderControl - это лучше?
- 11. TSQL - сделайте это лучше
- 12. Должен ли я обновлять несколько VBO с помощью нескольких вызовов glBufferSubData() или одного VBO с одним вызовом glBufferSubData()?
- 13. Как написать это лучше?
- 14. Почему это лучше?
- 15. glBufferSubData между glDrawArrays вызывает искажающие данные
- 16. Вызов glBufferSubData несколько раз за кадр
- 17. Что делает glBufferSubData медленным в большом буфере?
- 18. Лучше использовать это. перед кодом?
- 19. Можно ли это лучше написать?
- 20. GlMapBuffer занимает больше времени и длиннее
- 21. Как это можно написать лучше?
- 22. TransactionScope: Получилось ли это лучше?
- 23. Как это можно сделать лучше?
- 24. OpenGL: Как использовать glMapBuffer с Qt?
- 25. Как это лучше писать? Рубин Sequel цепочка ИЛИ
- 26. Это ошибка или может быть лучше сформулирована в документах Android?
- 27. как лучше сделать это решение JavaScript или холст
- 28. Лучше использовать std :: string или single char, когда это возможно?
- 29. HTML: это лучше кодировать весь адрес изображения или изображения/
- 30. Переопределение CSS. Это лучше, чтобы отменить или вспомнить все атрибуты
Это зависит от варианта использования. Вам придется протестировать его для вашего дела. – BDL
Хорошо, я сделал несколько тестов, и кажется, что в моем случае 'glMapBuffer' работает медленнее, чем' glBufferSubdata': с 'glMapBuffer' примерно на 10FPS меньше, чем с' glBufferSubdata' – zeb
@zeb: на самом деле это звучит так, как будто нет если вы загружаете данные достаточно часто, чтобы это было большим узким местом. Посмотрите на мульти-буферизацию или сиротство вместо того, чтобы создавать конфликты ресурсов (очереди с использованием ваших данных по сравнению с текущим фреймом). OpenGL Wiki [обсуждает это] (https://www.opengl.org/wiki/Buffer_Object_Streaming) и будет хорошим местом для начала. –