如何选择性能最高的渲染器,Canvas 或 WebGL

How to choose most performant renderer, Canvas or WebGL

我正在使用 PIXI.js 开发桌面设备游戏。 PIXI 同时提供 WebGL 和 Canvas 渲染器,我们将在设备支持的任何地方使用 WebGL。

我的问题是,一些低端设备在技术上 支持 WebGL,尽管由于 GPU 速度较慢,它并不 运行 很好。在某些情况下 Canvas 渲染会表现得更好。

如何在 运行 时决定使用哪个渲染器?

也许 WebGL 上下文包含一些有用的信息。

官方方法是在创建上下文时使用 failIfMajorPerformanceCaveat 标志。这是解释它应该如何工作的规范的 link: https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2.1

它在 Chrome 上得到了一段时间的支持(我认为是从 2013 年开始),所以它可能会很好地排除一些 "slow" 实现。

坏消息是,在编写 PixiJS 时,似乎仍然无法将任意参数传递给 WebGL 上下文创建。我还没有重新检查,但是关于这个的问题还没有正式结束: https://github.com/pixijs/pixi.js/issues/1738

因此您必须劫持 PixiJS 代码或手动创建 Web 上下文。

另外,当然,并不是每个浏览器都支持这个相对较新的标志。

如果稳定性比性能更重要,一个额外的选择是在 4.4 之前为原生 Android 浏览器完全禁用 WebGL,其中正式引入了 Chrome Web View。这将排除旧的自定义 WebGL 实现(例如 Sony xperia one)。

个人不太愿意在app开始时做压力测试来选择渲染实现。小的 glitch/spike 性能可能会导致在非常好的硬件上切换到 canvas。但是如果你想走这条路,这里有一个关于在 PIXI 中实现它的讨论: http://www.html5gamedevs.com/topic/1733-detect-performance-issues-to-display-a-message/