Opengl es glBufferSubData在许多android设备上运行速度非常慢

Opengl es glBufferSubData在许多android设备上运行速度非常慢,opengl-es,opengl-es-2.0,opengl-es-3.0,Opengl Es,Opengl Es 2.0,Opengl Es 3.0,我已经请求了大约2M的gl缓冲区用于共享,并使用glBufferSubData更新顶点和索引的数据,它在我的iOS设备上运行良好。然而,当我在我的android设备上测试它时,速度非常慢 我在官方网站上找到了一些注释: “在更新数据存储之前,渲染必须从管道中排出”这句话的真正含义是什么?您看到的性能差异可能不仅仅是iOS/Android的差异,而是非常特定于您对API的使用和驱动程序中glBufferSubData的实现。如果看不到更多的代码,或者不知道您正在收集什么性能指标,就很难进一步评论

我已经请求了大约2M的gl缓冲区用于共享,并使用glBufferSubData更新顶点和索引的数据,它在我的iOS设备上运行良好。然而,当我在我的android设备上测试它时,速度非常慢

我在官方网站上找到了一些注释:


“在更新数据存储之前,渲染必须从管道中排出”这句话的真正含义是什么?

您看到的性能差异可能不仅仅是iOS/Android的差异,而是非常特定于您对API的使用和驱动程序中glBufferSubData的实现。如果看不到更多的代码,或者不知道您正在收集什么性能指标,就很难进一步评论

“渲染必须在数据传输之前从管道中排出”是什么意思 商店可以更新“真的是什么意思

这里的想法是,尽管OpenGL API给人一种错觉,即每个命令在继续之前都会执行到完成,但事实上,绘图通常是在后台批处理并异步完成的。这里的问题是glBufferSubData可能会添加一个同步点,这意味着驱动程序必须暂停,直到使用该缓冲区的所有先前渲染完成后才能继续

考虑下面的例子。在一个好的情况下,我们可能会有这样的情况:

  • GLBUFFERSUBSDATA使用ABCDE进入缓冲区1
  • 使用缓冲区1绘制调用
  • GLBUFFERSUBSDATA使用FGHIJ进入缓冲区2
  • 使用缓冲区2绘制调用

  • 交换缓冲区“我要求共享大约2M gl缓冲区”你是说你有2MB缓冲区,还是说你实际上有200万个单独的缓冲区?只有一个2MB的缓冲区