Ash*_*ain 5 javascript performance google-chrome webgl
我有一个2D HTML5游戏引擎(www.scirra.com),并且真的想要检测WebGL是否将使用Chrome 18的'Swiftshader'软件渲染器进行渲染.如果是这样,我们更倾向于回归到普通的画布2D上下文,就像在其他浏览器中一样.那里的人群中有低CPU的低端机器,在软件渲染时将游戏变成幻灯片,我认为在很多情况下2D画布会加速硬件.但是,在Chrome中WebGL上下文创建永远不会失败,并且没有明显的方法来检测SwiftShader.
我试过的事情:
// Always returns "WebKit WebGL" regardless of SwiftShader
gl.getParameter(gl.RENDERER)
// Always returns "WebKit" regardless of SwiftShader
gl.getParameter(gl.VENDOR)
Run Code Online (Sandbox Code Playgroud)
我可以尝试考虑最大纹理大小或其他MAX_*属性之类的东西,但是我怎么知道它们在机器之间不会因为SwiftShader而有所不同?而且我认为SwiftShader的目的是模仿常见的硬件,使用这种方法可能仍然会产生很多误报.
我不想写一个启动性能测试,因为:
我不想在Chrome上禁用WebGL,因为硬件加速的WebGL性能可以超过canvas 2D的两倍!如果我们这样做,每个人都会失败.
我不想添加游戏内开关或用户设置,因为有多少用户关心它?如果游戏很慢,他们就会退出,很可能不会搜索解决方案."这场比赛很糟糕,我会去别的地方." 我认为只有少数用户会费心阅读"顺便说一下,如果这个游戏很慢,请尝试将此设置更改为'画布2D'......"
我目前最好的猜测是使用gl.getSupportedExtensions().我发现SwiftShader报告了以下扩展:
OES_texture_float,OES_standard_derivatives,WEBKIT_WEBGL_lose_context
Run Code Online (Sandbox Code Playgroud)
...但真正的硬件加速上下文报告:
OES_texture_float,OES_standard_derivatives,WEBKIT_WEBGL_lose_context,WEBKIT_WEBGL_compressed_textures
Run Code Online (Sandbox Code Playgroud)
注意添加WEBKIT_WEBGL_compressed_textures.一些快速研究表明,这可能会或可能不会得到广泛支持.见这种支持台 -都GL_EXT_texture_compression_s3tc和GL_ARB_texture_compression出现的广泛支持在桌面上的卡.此外,该表似乎只列出了相当旧的型号,因此我可能会猜测所有现代桌面图形卡都会支持WEBKIT_WEBGL_compressed_textures...因此我对SwiftShader的检测标准是:
WEBKIT_WEBGL_compressed_textures当然,如果SwiftShader将来添加压缩纹理支持,这又会再次破坏.但我无法通过软件渲染器看到压缩纹理的优势!此外,如果有许多不支持的实际工作视频卡,它仍然会得到很多误报WEBKIT_WEBGL_compressed_textures!
有没有更好的方法来检测SwiftShader?
您真正想知道的是,在 Canvas2D 中而不是 WebGL 中呈现您的游戏是否会更好。这与它是否在 Swiftshader 之上运行不是同一个问题。
老实说,我不知道为什么询问用户是不可接受的。
许多有史以来最畅销的游戏都有这些选项,包括
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |