- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 2D HTML5 游戏引擎 ( www.scirra.com ),我真的想检测 WebGL 是否要使用 Chrome 18 的“Swiftshader”软件渲染器进行渲染。如果是这样,我们将非常更愿意退回到普通的 canvas 2D 上下文,就像在其他浏览器中发生的那样。那里的大多数人都使用 CPU 较弱的低端机器,在软件渲染时将游戏变成幻灯片,我认为在许多情况下,2D Canvas 会被硬件加速。然而,WebGL 上下文创建在 Chrome 中永远不会失败,并且没有明显的方法来检测 SwiftShader。
我尝试过的事情:
// Always returns "WebKit WebGL" regardless of SwiftShader
gl.getParameter(gl.RENDERER)
// Always returns "WebKit" regardless of SwiftShader
gl.getParameter(gl.VENDOR)
我可以尝试考虑最大纹理大小或其他 MAX_* 属性,但我怎么知道即使使用 SwiftShader,它们也不会因机器而异?由于我猜想 SwiftShader 旨在模仿普通硬件,因此使用该方法可能仍会出现很多误报。
我不想写启动性能测试,因为:
我不想在 Chrome 上完全禁用 WebGL,因为硬件加速的 WebGL 性能可以比 canvas 2D 快两倍以上!如果我们那样做,每个人都会输。
我不想添加游戏内开关或用户设置,因为有多少用户关心这些?如果游戏速度很慢,他们就会退出并且很可能不会寻找解决方案。 “这游戏糟透了,我去别的地方吧。”我认为只有少数用户会费心阅读说明,例如“顺便说一句,如果这个游戏很慢,请尝试将此设置更改为‘canvas 2D’...”
我目前最好的猜测是使用 gl.getSupportedExtensions()
。我发现 SwiftShader 报告了以下扩展:
OES_texture_float,OES_standard_derivatives,WEBKIT_WEBGL_lose_context
...但是真正的硬件加速上下文报告:
OES_texture_float,OES_standard_derivatives,WEBKIT_WEBGL_lose_context,WEBKIT_WEBGL_compressed_textures
请注意添加了 WEBKIT_WEBGL_compressed_textures
。一些快速研究表明这可能会或可能不会得到广泛支持。参见 this support table - GL_EXT_texture_compression_s3tc
和 GL_ARB_texture_compression
似乎在桌面卡上得到广泛支持。此外,该表似乎只列出了相当老的模型,所以我可以冒险猜测所有现代桌面图形卡都支持 WEBKIT_WEBGL_compressed_textures
...因此我对 SwiftShader 的检测标准是:
WEBKIT_WEBGL_compressed_textures
当然,如果 SwiftShader 将来添加压缩纹理支持,这又会中断。但是我看不到使用软件渲染器压缩纹理的优势!此外,如果有许多不支持 WEBKIT_WEBGL_compressed_textures
的实际工作视频卡,它仍然会出现很多误报!
难道没有更好的方法来检测 SwiftShader 吗?
最佳答案
转到 http://code.google.com/p/angleproject/wiki/ExtensionSupport查看 EGL 扩展 EGL_ANGLE_software_display,如果它可用,那是因为有一个 SwiftShader 后端。
关于javascript - 在 Chrome 18 中检测 SwiftShader WebGL 渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10456491/
我有一个 2D HTML5 游戏引擎 ( www.scirra.com ),我真的想检测 WebGL 是否要使用 Chrome 18 的“Swiftshader”软件渲染器进行渲染。如果是这样,我们将
我正在尝试使用 headless (headless) Chrome (使用 puppeteer )htmlt将pdf打印为,并且一切正常,除非html包含大的png图像(超过10.000x10.00
我是一名优秀的程序员,十分优秀!