【问题标题】:Is it possible to force multiple paint operations on a 2D canvas (software rendering)?是否可以在 2D 画布上强制执行多个绘制操作(软件渲染)?
【发布时间】:2014-03-17 09:59:42
【问题描述】:

我正在开发一款在 Chromecast 设备(没有硬件加速)上使用 HTML5 canvas 2D 上下文绘图的游戏。我注意到在一帧中绘制两个对象将触发包含它们的整个区域的重新绘制。作为“最坏情况”,假设我只想更改大画布元素的左上角和右下角像素的颜色。如果我使用两个单像素 fillRect 调用来执行此操作,它(至少是 WebKit/Blink)会将整个画布标记为脏,从而触发非常昂贵的绘制操作。我相信这应该链接到在 Chromium 中执行此逻辑的代码:

https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp&l=218

有什么方法可以说服浏览器实际执行两个小的绘制操作,而不是一个(过分)大的?或者这总是会更慢,尽管它的重新绘制明显更少?我已经尝试将元素放在彼此叠加的不同画布元素上,但浏览器似乎仍然捕捉到它并将它们批处理在一起(至少如 DevTools 中的重绘区域所示)。

【问题讨论】:

    标签: google-chrome canvas html5-canvas chromecast


    【解决方案1】:

    据我所知,目前没有比这更好的了;一个主要缺点是也没有实现双缓冲,这会提高性能。我们将看到这些领域的进步。

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 2016-06-15
      • 2021-01-05
      • 2019-05-07
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多