Rob*_*ock 26 javascript google-chrome webgl libgdx
我有一个用LibGDX创建的应用程序.我可以在桌面上运行该应用程序,它以90 fps @ 1080p运行.
在Firefox上,它以40-50 fps @ 1080p(最大化窗口)运行.
在Chrome上,它以30 fps @ 1080p(最大化窗口)运行.
但是在Chrome上,如果我降低分辨率,性能会翻倍(达到60fps).在Firefox上,这不会发生.这可能是什么原因?
我正在使用webkitRequestAnimationFrame.
如图所示,我知道我的电脑可以很好地处理分辨率.
编辑
我正在尝试应用下面的提示,虽然它们似乎主要针对移动GPU.
资料来源:https://wiki.mozilla.org/Platform/GFX/MobileGPUs#Memory_Bandwidth
始终在glBindFramebuffer之后立即调用glClear
请参阅Adreno 200文档的第3.2.1节:"必须(a)在切换帧缓冲对象(FBO)时使用清除以避免驱动程序尝试保存/恢复GMEM内容,以及(b)始终清除深度-buffer在一个帧的开头."
这是有道理的,所以我们应该总是这样做.具体来说,这意味着我们应该在每次glBindFramebuffer调用之后执行glClear,理想情况是在它之后,或者至少在任何绘制调用之前.
Framebuffer绑定很昂贵
更改帧缓冲区绑定强制会立即解析当前帧缓冲区的渲染.因此,对渲染进行排序以最小化帧缓冲区绑定非常重要.Adreno 200文档的第3.2.4节有一个有用的解释.
编辑
以上并没有显着的差异.
编辑
我感觉这个问题是由于GLSL编译器引起的.我对这个主题没有太多的了解,但我相信OpenGL ES的GLSL编译成普通的GLSL,并带有一些特定于浏览器的代码.可能是Chrome编译的次数不够理想,导致片段着色会在较高分辨率下降低程序速度.
如果某人有关于如何确保此编译最优化的一些提示,我可以尝试一下,看看它是否解决了问题.
编辑
在使用英特尔高清显卡4000+芯片组的Windows上Chrome中,问题似乎并不普遍.Chrome版本:40.0.2214.111米.分辨率低:45fps~.高分辨率:30 fps稳定.
我最初的测试案例是在Ubuntu上使用GTX 650的Chrome.Chrome版本将在稍后添加.
编辑
显示此问题的Chrome版本:GTX 650显卡上Ubuntu上的40.0.2214.111(64位).
编辑
在配备GTX 650的同一台PC上,在Windows 7下,同一应用程序在Chrome下稳定运行60fps.由于在Ubuntu下编译为Java的应用程序运行速度为90fps,我认为它不能成为Linux驱动程序的问题,而是Chrome版Linux的问题.
编辑
我已经向Chrome发送了一个关于此问题的错误报告.
这里不包括其他的东西,就我上次的研究而言,所有这些requestAnimationFrame方法的上限都是 60fps,并且只能低于这个值。
您可以使用此位进行测试:http://cssdeck.com/labs/gvxnxdrh/。您可以fps根据需要将 var 修改得尽可能高,但在我桌面上的任何浏览器中,动画的速度都不会超过 60fps。
| 归档时间: |
|
| 查看次数: |
2841 次 |
| 最近记录: |