如何选择性能最佳的渲染器,Canvas 还是 WebGL?

4
我正在为桌面设备开发一款游戏,使用 PIXI.js。PIXI提供了WebGL和Canvas渲染器,我们将在设备支持的情况下使用WebGL。
我的问题是,一些低端设备虽然技术上“支持”WebGL,但由于GPU缓慢而无法运行良好。在某些情况下,Canvas渲染会表现得更好。
如何在运行时决定使用哪个渲染器?
也许WebGL上下文包含一些有用的信息。

(本地)WebGL上下文上没有任何性能信息,但在游戏循环中测量帧时间应该很容易解决问题。 - LJᛃ
1
你考虑过像大多数PC游戏一样直接询问用户吗? - gman
@gman 很好的建议,但我们的用户可能不知道这条消息在说什么。他们不是最技术娴熟的一群。 - Drahcir
1个回答

4
官方建议在上下文创建时使用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上下文。
当然,并非每个浏览器都支持这个相对较新的标志。
如果稳定性比性能更重要,则另一个选项是在Android 4.4之前的本机浏览器中完全禁用WebGL,其中正式引入了Chrome Web View。这将排除旧版本的自定义WebGL实现(例如Sony Xperia)。
个人认为,在应用程序开始时进行压力测试来选择渲染实现是不愿意的。性能上的小故障/峰值可能会导致在完全良好的硬件上切换到画布。但是,如果您想采用这种方式,PIXI中有一个实现讨论,请参见此处:http://www.html5gamedevs.com/topic/1733-detect-performance-issues-to-display-a-message/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接