Можно ли принудительно выполнить несколько операций рисования на 2D-холсте (программный рендеринг)?

Я работаю над игрой, в которой используется 2D-контекст холста HTML5 на устройстве Chromecast (которое не имеет аппаратного ускорения). Я заметил, что рисование двух объектов в одном кадре вызовет перерисовку всей области, содержащей оба объекта. В качестве «худшего случая» представьте, что я хочу изменить цвет только верхнего левого и нижнего правого пикселей большого элемента холста. Если я использую для этого два однопиксельных вызова fillRect, он (по крайней мере, WebKit/Blink) пометит весь холст как грязный, что приведет к очень дорогостоящей операции рисования. Я считаю, что это должно быть связано с кодом, который выполняет эту логику в Chromium:

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

Есть ли способ убедить браузер выполнять две маленькие операции рисования вместо одной (чрезмерно) большой? Или это всегда будет медленнее, несмотря на то, что он перерисовывает значительно меньше? Я попытался разместить элементы на разных элементах холста, наложенных друг на друга, но браузер, кажется, все еще улавливает их и объединяет их вместе (по крайней мере, как показано областями перерисовки в DevTools).


person chaps    schedule 17.02.2014    source источник


Ответы (1)


Насколько я знаю, в настоящее время вы не можете добиться большего; один из основных недостатков заключается в том, что двойная буферизация также не реализована, что улучшило бы производительность. Мы будем видеть улучшения в этих областях в будущем.

person Ali Naddaf    schedule 17.02.2014