使用 AssemblyScript 通过引用操作画布数据(类型化数组)

Posted

技术标签:

【中文标题】使用 AssemblyScript 通过引用操作画布数据(类型化数组)【英文标题】:Manipulating canvas data (typed arrays) by reference using AssemblyScript 【发布时间】:2020-07-23 19:23:23 【问题描述】:

我正在尝试通过使用 AssemblyScript 将其从 Typescript 移植到 WebAssembly 来提高相当密集的图形方法的性能。该方法操作画布的ImageData

我无法将这个ImageData(或至少Uint8ClampedArray)从Typescript 传递到AssemblyScript。我找到了一个非常好的tutorial,详细说明了如何创建这些数据并将其从 AS 发送到 TS,但没有找到太多关于反过来的信息。

我很想知道如何做到这一点,最好不必在 AS 中制作 Uint8ClampedArray 的新副本,但我不确定这是否可能。非常感谢它为什么(不)的详细信息!

【问题讨论】:

【参考方案1】:

我很想知道如何做到这一点,最好不必在 AS 中制作 Uint8ClampedArray 的新副本

你不能像detailed in this answer to a similar question那样通过 WebAssembly 直接读取/写入画布。您可以在 WebAssembly 和宿主 javascript 之间共享一个 WebAssembly.Memory 实例,但是,对于您渲染的每一帧,您仍然需要将此内存中的图像复制到您的画布中。

【讨论】:

很遗憾不能直接写入画布,但我想应该是沙盒。无论哪种方式,如何将数组写入WebAssembly.Memory 实例?另外,是否可以反过来呢?直接从 Javascript 访问“WebAssembly 拥有的数组”?因此写入该内存。

以上是关于使用 AssemblyScript 通过引用操作画布数据(类型化数组)的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 AssemblyScript 导入 .wasm 文件?

assemblyScript

三等号 (===) 在 AssemblyScript 中的行为是不是不同?

如何在 AssemblyScript 中使用 asc 编译 console.log("1")?

三等号(===)在AssemblyScript中的行为是否不同?

带有空格的 AssemblyScript 导出名称