5

我不太明白为什么这段代码在 iOS 上的 GPU 速度很慢,这段代码在 Windows 上运行良好,没有任何问题。

基本上我正在做的是我有一个大的动态顶点缓冲区(GL_STREAM_DRAW),我尝试只更新它的一部分,单帧中的部分不应该重叠,所以它们不应该导致刷新,CPU不应该'不必等待 GPU 完成,但显然情况并非如此,即使在绘制 10 到 20 个三角形时,我在 iPhone 4 上也能获得大约 10 fps……而我的 PC 上使用相同的代码...

正如您在跟踪中看到的那样,我正在重用相同的缓冲区,但我要确保更新的部分不会重叠......我可以做些什么来提高性能?

索引跟踪
第695章
696 glBufferSubData(GL_ARRAY_BUFFER,144l,144l,0x0453d090)
第697章
第698章
第699章
700 glBindTexture(GL_TEXTURE_2D,12u)
701 glUseProgram(12ul)
第702章
第703章
704 glUniform4fv(uniform_000000001cd24950_12_2,1,{0.0000000f,0.0000000f,-0.0010010f,0.0000000f})
705 glUniform4fv(uniform_000000001cd24950_12_3,1,{-0.0000000f,0.6333333f,-0.0010010f,1.0000000f})
第706章 (GL_TRIANGLES, 6, 6)
第707章
708 glBufferSubData(GL_ARRAY_BUFFER,288l,144l,0x0453d120)
4

1 回答 1

5

我猜 iOS 驱动程序不够聪明,无法看到更新的范围 (in glBufferSubData) 与当前处理的范围不重叠。我什至不确定您的 PC 驱动程序是否足够智能(可能是您的 PC 的整体性能隐藏了这一点)。如何同步以及是否对其进行优化取决于驱动程序。

处理此问题的一种解决方案可能是ARB_map_buffer_range扩展,它可以为驱动程序提供明确的提示。但我不确定 ES 是否支持这一点。否则,您将无法绕过将缓冲区分成多个小缓冲区。

于 2011-06-13T16:38:21.763 回答