我必须在每一帧上传
问题还包括将顶点数据上传到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()快?
答案 0 :(得分:5)
无论您使用哪种复制API,从主机到设备复制相同数据的速度都应该相似。
然而,要复制的数据块的大小非常重要。以下是使用CUDA cudaMemcpy()
显示数据大小与复制速度之间关系的基准。
CUDA - how much slower is transferring over PCI-E?
如果您知道要调用的复制API的数量以及每个副本的数据大小,您可以简单地从上图估计平均速度。
当元素大小很小且元素数量很大时,通过多次调用复制API来复制仅从主机到设备的单独更改元素绝对不是一个好主意。