2014-11-26 4 views
1

Я заметил, что функция drawImage в 1000+ раз медленнее, когда оба источника и места назначения одинаковы. Почему это ? Какие полотна идут на GPU, а что нет? Любая помощь по этой теме была бы очень оценена.HTML5 холст drawImage медленный, когда исходные и целевые холсты одинаковы?

Спасибо!

+0

Большинство реализаций холста будут использовать weGL/Open GL за сценой. Использование холста в качестве источника и адресата потребует скопировать весь экран перед операцией, что является некоторой медленной работой ... очень плохо обрабатывается браузерами (копия не требуется, если прямоугольники не перекрываются, но показания показывают, что копия выполнена). – GameAlchemist

ответ

1

При использовании холста в качестве источника и назначения, браузер должен делать (есть мелкие этапы, но они являются основными):

  • Создать царапание растрового для копирования
  • Скопируйте точечный растровый рисунок в растровое изображение нуля
  • Скопируйте растровое изображение с нуля в исходное растровое изображение в другом положении (т. Е. DrawImage (холст, ...));
  • Удалить скретч

это вместо того, при использовании отдельных полотен:

  • Скопировать растровый к месту назначения растрового

Почему не просто "блиттинг"? official standard define этот случай, таким образом, (курсив мой):

Когда холст или объект CanvasRenderingContext2D является обращается на себя, модель рисования требует источник должен быть скопирован до того, как изображение поэтому можно скопировать части холста или растрового изображения нуля на перекрывающиеся части.

Также обратите внимание на Drawing Model для этапов.

Смежные вопросы