【发布时间】:2013-09-20 08:56:15
【问题描述】:
我必须在每一帧上仅上传 特定元素(更多数千个)顶点数组 - 或第一个和最后一个更改值之间的整个区域,但是效率很低,因为它有可能重新上传整个数组,无论如何都会上传许多未更改的值。
问题还包括将顶点数据上传到 GPU 的最快方法是什么。
有几种方法可以做到:
glBufferData() / glBufferSubData() // Standard upload to buffer
glBufferData() // glBufferData with double buffer
glMapBuffer() // Mapping video memory
cudaMemcpy() // CUDA memcopy from host to device vertex buffer
哪个是最快的?我特别关注 CUDA 方式,这与标准 OpenGL 方法不同。它比 glBufferData() 或 glMapBuffer() 快吗?
【问题讨论】:
-
是的,这将是直接的步骤,但我应该多次更改项目的整个实现以对所有这些进行基准测试。
-
很难回答...有时上传整个内存块可能比上传特定(仅更改)元素要快得多。
标签: c++ opengl cuda vertex-buffer