繁体   English   中英

将数组传递给 c++.wasm 模块。 授权

[英]Passing array to c++ .wasm module. Emscripten

我有一个包含相应图像的掩码数据的数组,我需要传递给用 emscripten 编译的 c++ function。 掩码数组由 -1 到 255 的值组成,所以我猜必须使用 Int16Array 来表示这些值。 是否可以将此数组作为指向 wasm 模块的指针传递? 我知道我必须分配 memory 并传递指针,但我被困在下面的代码上。 我如何正确分配和设置指针以便 c++ function 看到正确的数据?

maskData 获得如下:

const mData = ctx.getImageData(0, 0, canvas.width, canvas.height);

        var data = Array.prototype.slice.call(mData.data);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    let data = imageData.data;

    const dataLength = data.length;
    const maskDataLength = maskData.length;

    var dataPointer = Module._malloc(dataLength * data.BYTES_PER_ELEMENT);
    var maskDataPointer = Module._malloc(maskDataLength * 2);

    Module.HEAPU8.set(data, dataPointer);
    Module.HEAP16.set(maskData, maskDataPointer);

    let result = Module.ccall(
      "process",
      "number",
      ["number", "number", "number", "number", "number"],
      [dataPointer, dataLength, maskDataPointer, pos, neg]
    );

    data = new Int16Array(Module.HEAP16.buffer, result, dataLength);

    Module._free(dataPointer);
    Module._free(maskDataPointer);
    Module._free(result);

maskPointer表示 HEAP8 的索引,因此除以 2 即可访问 HEAP16。

Module.HEAP16.set(maskData, maskDataPointer >> 1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM