在Chrome 18中检测SwiftShader WebGL渲染器

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_s3tcGL_ARB_texture_compression出现的广泛支持在桌面上的卡.此外,该表似乎只列出了相当旧的型号,因此我可能会猜测所有现代桌面图形卡都会支持WEBKIT_WEBGL_compressed_textures...因此我对SwiftShader的检测标准是:

  • Windows操作系统
  • 谷歌Chrome浏览器
  • WebGL的情况下也不会支持WEBKIT_WEBGL_compressed_textures
  • 结果:回退到Canvas 2D

当然,如果SwiftShader将来添加压缩纹理支持,这又会再次破坏.但我无法通过软件渲染器看到压缩纹理的优势!此外,如果有许多不支持的实际工作视频卡,它仍然会得到很多误报WEBKIT_WEBGL_compressed_textures!

有没有更好的方法来检测SwiftShader?

gma*_*man 1

您真正想知道的是,在 Canvas2D 中而不是 WebGL 中呈现您的游戏是否会更好。这与它是否在 Swiftshader 之上运行不是同一个问题。

老实说,我不知道为什么询问用户是不可接受的。

许多有史以来最畅销的游戏都有这些选项,包括

  • 使命召唤现代战争3
  • 战地3
  • 愤怒的小鸟 (http://chrome.angrybirds.com/)