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

问题描述:

我正在为桌面设备开发一个包含PIXI.js的游戏。 PIXI提供WebGL和Canvas渲染器,我们将在设备支持的任何位置使用WebGL。如何选择最高性能的渲染器,画布或WebGL

我的问题是,一些低端设备技术上支持 WebGL,虽然它运行不好,由于有一个缓慢的GPU。在某些情况下,Canvas渲染效果会更好。

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

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

+0

(原生的)WebGL上下文没有任何性能信息,但是测量你的gameloop中的帧时间应该这样做容易。 –

+1

你有没有考虑过像大多数PC游戏那样要求用户这样做? – gman

+0

@gman好的建议,但我们的用户可能不知道该消息是在说什么。他们不是技术最好的一群。 – Drahcir

正式方法是在上下文创建时使用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)。

就我个人而言,我不愿意在应用程序开始时选择渲染实施进行压力测试。性能上的小故障/尖峰可能导致在完美的硬件上切换到画布。但是如果你想走这条路线,有关于在PIXI中实现它的讨论: http://www.html5gamedevs.com/topic/1733-detect-performance-issues-to-display-a-message/