是glBufferSubData还是glMapBuffer更好

zeb*_*zeb 6 opengl

为了更新我的统一缓冲区对象,我使用glBufferSubData。是使用glBufferSubData还是glMapBuffer使用起来更快glUnmapBuffer

mmo*_*jab 9

好处glMapBuffer是您不需要先将数据复制到数组中,然后再用于glBufferSubData填充 opengl 缓冲区。使用glMapBuffer,您可以将数据直接复制到 opengl 将在必要时提取到 GPU 的部分内存中。从我的角度来看,glMapBuffer当你想要填充一个经常更新的大缓冲区时应该更快。此外,您是如何将数据复制到之间的缓冲区glMapBufferglUnmapBuffer也很重要。

如果向我们展示您正在使用的代码glMapBuffer以及数据有多大,那么我们可以更容易地判断。无论如何,最终测量结果可以告诉您哪个更好。

更新: OpenGL Insight 异步缓冲区传输章节。在本章中,implicit synchronizationofglMapBufferglSubBufferData函数可能会让您感兴趣。

  • 即使使用 `glMapBuffer`,也可以将数据复制到 CPU 内存阵列。区别仅在于 `glBufferSubData` 使用用户分配的数组,而驱动程序使用 `glMapBuffer` 分配它。 (2认同)
  • @BDL 另外,当我说它更快时,我的意思是它更快,因为您不需要在用户端创建缓冲区并用要复制到缓冲区中的数据填充它。您可以直接将数据复制到opengl 将传输到gpu 的内存部分,直接。如果要复制的这块数据已经在一个数组中,并且我们不需要在用户端创建任何额外的数组,那么 `glMapData` 和 `glSubBufferData` 应该是相同的。 (2认同)