我有一个用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)始终清除帧开始处的深度缓冲区。"
这是有道理的,所以我们应该永远这样做。具体来说,这意味着我们应该在每次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驱动程序的问题,而是Linux版Linux的问题。
修改的
我已向Chrome发送了一个关于此问题的错误报告。
答案 0 :(得分:1)
此处不包括其他内容,就我上次所说的而言,所有requestAnimationFrame
方法上限为60fps ,并且只能低于此值。
您可以使用此位进行测试:http://cssdeck.com/labs/gvxnxdrh/。您可以根据需要修改fps
var,但在桌面上的任何浏览器中动画都不会超过60fps。