1

我有一个 rust-wasm 项目,我需要在 webassembly 中填充一个缓冲区,然后再将其传递给我的 js 脚本,然后用画布显示它。

(受本文启发)

static mut BUFFER: [u32; WIDTH * HEIGHT] = [0; WIDTH * HEIGHT];

但是 rust 中的静态 mut 是不安全的,所以我不能用#[wasm_bindgen]

如何在我的 js 脚本中获取此静态缓冲区的地址?

编辑 :

我已经看到了这个解决方案:

const { instance } = await WebAssembly.instantiateStreaming(
          fetch("./demo.wasm")
        );

const buffer_address = instance.exports.BUFFER.value;

我真的不明白这段代码中发生了什么,我不能使用它,因为我使用了 wasm-pack 构建工具:它为我创建了与 wasm 文件对应的 .js 文件,但我仍然无法得到缓冲区地址。

任何帮助,将不胜感激

4

1 回答 1

0

您链接的文章使用#[no_mangle],这使得BUFFER导出。

#[no_mangle]
static mut BUFFER: [u32; WIDTH * HEIGHT] = [0; WIDTH * HEIGHT];

BUFFER然后可以在实例上通过 找到导出的instance.exports.BUFFER.value;

于 2020-10-10T01:34:23.040 回答