在渲染之前直接上传是否会对性能产生负面影响

  • 本文关键字:性能 影响 是否 c++ opengl-es
  • 更新时间 :
  • 英文 :


我有一个顶点缓冲区,我使用glMapBufferRange和memcpy每帧更新一次。更新后,我直接调用glDrawArrays。

我的一位同事说,最好在帧的开头映射/写入/取消映射缓冲区,然后做其他事情以使缓冲区有时间上传,然后尽可能晚地调用glDrawArrays。

这种说法是真的吗?我认为任何可能导致刷新的东西都可能触发上传负担,可能比实际渲染调用更不方便。

问候

简短的回答 - 不,它应该没有任何区别。

渲染已经是深度异步的 - 您实际上不会在调用glDrawArrays()时开始绘制,这只是将命令添加到队列中,因此如果需要上传数据,GPU 不应立即阻塞。

对于大多数现代硬件,这两种情况下都没有实际的数据"上传" - 内存系统是连贯的,因此您可以在取消映射完成后立即在 GPU 上看到数据。

也就是说,在许多情况下,进行更少、更大的映射/取消映射调用对 CPU 开销有好处,因此您可能希望在这两种情况下将多个缓冲区更新批处理在一起,而不是逐个绘制地进行。

最新更新