gpt4 book ai didi

javascript - Emscripten:自定义生成的 js,使其以自定义方式加载 .wasm 文件

转载 作者:行者123 更新时间:2023-12-01 17:17:28 26 4
gpt4 key购买 nike

通过使用以下选项进行编译,
emcc -s WASM=1 main.cpp -o index.js
emscripten 生成 index.wasm , 和一个 js 包装器 index.js .
js 包装器加载 .wasm文件位于同一目录中,使用 XMLHttpRequest当它在浏览器中运行时。

那么如果我需要加载.wasm怎么办?手动存档?加载部分似乎硬编码在包装器中。

以下是我需要这样做的一些情况:

  • 我需要服务.wasm来自另一个 url 的文件(例如来自 CDN)。
  • 下载地址 .wasm文件是动态生成的。
  • 代码在沙箱中运行,其中 XMLHttpRequest不允许,只有像 getMyData('some_file') 这样的 API .
  • 我需要将所有文件嵌入为 base64 字符串。

  • 我知道我可以生成 .wasm仅文件,由
    emcc -s WASM=1 main.cpp -o index.wasm
    但是后来我丢失了包装器,这在使用 SDL 和 GLES 等一些 emscripten API 时并非微不足道。

    最佳答案

    AFIK,JS 包装器调用 fetch() 而不是 XHR。如果可用,您可以使用 Service Worker 拦截该请求并返回您想要的任何内容。

    您还可以修改 Emscripten 源(我有 v1.39.13)来重写默认加载行为。在文件中 $EMSDK/upstream/emscripten/src/preamble.js , 修改功能 getBinaryPromise() getBinary() 根据您的喜好,然后使用 emcc 构建在 WASM JS 包装器中拥有您的自定义加载行为。

    关于javascript - Emscripten:自定义生成的 js,使其以自定义方式加载 .wasm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61658812/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com