我正在用 PIXI.js 开发游戏对于桌面设备。 PIXI 同时提供 WebGL 和 Canvas 渲染器,我们将在设备支持的任何地方使用 WebGL。
我的问题是一些低端设备在技术上支持 WebGL,尽管它运行不佳,因为 GPU 速度较慢。在某些情况下,Canvas 渲染会表现得更好。
我如何在运行时决定使用哪个渲染器?
也许 WebGL 上下文包含一些有用的信息。
最佳答案
官方方法是在上下文创建时使用 failIfMajorPerformanceCaveat
标志。这是说明它应该如何工作的规范的链接:
https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2.1
它在 Chrome 上支持了一段时间(我认为是从 2013 年开始),所以它很可能会很好地排除一些“缓慢”的实现。
坏消息是,在编写 PixiJS 时,似乎仍然无法将任意参数传递给 WebGL 上下文创建。我还没有重新检查,但是关于这个的问题还没有正式结束: https://github.com/pixijs/pixi.js/issues/1738
因此您必须劫持 PixiJS 代码或手动创建 Web 上下文。
当然,并不是每个浏览器都支持这个相对较新的标志。
如果稳定性比性能更重要,一个额外的选择是在 4.4 之前为原生 Android 浏览器完全禁用 WebGL,其中正式引入了 Chrome Web View。这将排除旧的自定义 WebGL 实现(例如 Sony xperia one)。
我个人不太愿意在app一开始就做压力测试来选择渲染实现。性能上的小故障/峰值可能会导致在非常好的硬件上切换到 Canvas 。但是如果你想走这条路,这里有一个关于在 PIXI 中实现它的讨论: http://www.html5gamedevs.com/topic/1733-detect-performance-issues-to-display-a-message/
关于javascript - 如何选择性能最高的渲染器、Canvas 或 WebGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32399082/