【问题标题】:glBufferSubData performances abysmal on iOS?glBufferSubData 在 iOS 上的表现很糟糕?
【发布时间】:2011-09-13 13:01:13
【问题描述】:

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

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

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

索引跟踪 第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)

【问题讨论】:

  • 如果您是新来的,别忘了告诉自己有关 accpet 和 up-vote 功能的信息。

标签: ios performance opengl-es gpu vbo


【解决方案1】:

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

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

【讨论】:

  • 是的,这就是我最终的想法……遗憾的是,OpenGL 无法像 DirectX 那样工作,因为在 OpenGL 中处理顶点缓冲区总是很痛苦。我发现在 iPhone 上工作的解决方案是恢复为普通顶点数组(无 VBO)以满足我的动态顶点缓冲区需求。
猜你喜欢
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 2014-04-19
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
相关资源
最近更新 更多