Избегаете двух полных копий для обновления холста из WebAssembly? - PullRequest
0 голосов
/ 14 октября 2019

В JavaScript я могу напрямую манипулировать пикселями холста и обновлять их одной копией:

ctx = canvas.getContext('2d')
imageData = ctx.getImageData(0, 0, canvas.width, canvas.height)
pixelTypedArray = imageData.data

modifyPixels(pixelTypedArray)

// refresh canvas with single copy
ctx.putImageData(imageData, 0, 0)

Но в wasm мы должны выделить свои собственные TypedArray, используя память wasm, и мы можемзатем используйте imageData.data.set(myTypedArray), но это, кажется, просто копирует все содержимое нового типизированного массива в типизированный массив холста, за которым все еще должен следовать putImageData, копируя все содержимое во второй раз.

Isесть ли способ переназначить ImageData холста на наши новые ImageData, чтобы мы могли обновить холст только одной копией, используя ctx.putImageData()?

Если нет, кажется, что использование wasm для манипулированияизображение будет потрачено впустую из-за неэффективного двойного копирования и двойного представления в памяти, особенно при работе с большими изображениями и / или постоянном обновлении холста.

...