#javascript #rust #webassembly #wasm-bindgen
#javascript #Ржавчина #webassembly #wasm-привязка
Вопрос:
У меня есть проект rust-wasm, в котором мне нужно заполнить буфер в webassembly перед передачей его в мой js-скрипт, а затем отобразить его с помощью canvas.
(Вдохновлено этой статьей)
static mut BUFFER: [u32; WIDTH * HEIGHT] = [0; WIDTH * HEIGHT];
Но статический mut в rust небезопасен, поэтому я не могу объявить его с помощью #[wasm_bindgen]
Как я могу получить адрес этого статического буфера в моем js-скрипте?
Редактировать :
Я видел это решение:
const { instance } = await WebAssembly.instantiateStreaming(
fetch("./demo.wasm")
);
const buffer_address = instance.exports.BUFFER.value;
Я действительно не понимаю, что происходит в этом коде, и
Я не могу использовать это, потому что я использую wasm-pack buildtool: он создает для меня файл .js, соответствующий файлу wasm, и я все еще не могу получить адрес буфера.
Любая помощь будет оценена
Ответ №1:
В вашей связанной статье используется #[no_mangle]
, что делает BUFFER
экспортированный.
#[no_mangle]
static mut BUFFER: [u32; WIDTH * HEIGHT] = [0; WIDTH * HEIGHT];
Затем экспортированный BUFFER
файл можно найти в экземпляре через instance.exports.BUFFER.value;
.