【问题标题】:Google Chrome hardware acceleration making game run slow谷歌浏览器硬件加速使游戏运行缓慢
【发布时间】:2014-07-19 17:39:38
【问题描述】:

因此,我一直在使用 HTML5 画布开发游戏,并注意到当在 Google Chrome 中打开硬件加速时,游戏会滞后并且运行速度要慢得多。你可以自己试试here

通过进行一些分析,我发现问题在于drawImage。 更具体地说,将一个画布绘制到另一个画布上。我经常这样做。

硬件加速开启。

硬件加速关闭。

从一张画布到另一张画布是否缺少一些基本的东西?为什么差异会如此深远?

【问题讨论】:

    标签: javascript html google-chrome canvas


    【解决方案1】:

    如果我没记错的话,在 Chrome 中,DOM 内的画布会加载到 GPU 内存中,而 DOM 外的画布可能不会。因此,从屏幕外画布到屏幕画布的每个 drawImage 都会将画布的内容作为纹理加载到 GPU 上,然后将 GPU 上的内存副本加载到屏幕画布上。将新纹理发送到 GPU 的成本可能非常高。在大多数 GPU 上,加载纹理的吞吐量很高,但延迟也很高。

    Chrome 团队的人必须插话给出明确的答案,但这符合我在 Chrome 中使用画布的经验。

    【讨论】:

    • 那么将所有画布附加到 DOM 可以提高性能?
    • 可能——它很容易测试。您要复制的画布有多大?我过去做过类似的事情,虽然复制画布的性能并不出色,但它在我的分析器中从未出现过如此高的水平。但我通常会复制小(256x256 以下)画布
    • 将它们全部移动到 DOM 并将画布分层而不是将它们相互绘制就可以了。
    • 哦,是的,如果您可以选择这样做,那几乎总是会更好。由于您的时间占如此高的比例,我假设您在同一画布上复制了数百或数千次。
    • 据我所知,这实际上是将一个非常大的画布 (4000x4000) 缩放到一个非常小的画布 (200x200) 以用于未探索的区域。
    猜你喜欢
    • 2012-10-19
    • 2016-08-23
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2013-07-08
    • 2013-10-14
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多