Emscripten:自定义生成的 js,以便以自定义方式加载 .wasm 文件

通过使用以下选项进行编译,

emcc -s WASM=1 main.cpp -o index.js

emscripten 生成一个 、 和一个 js 包装器 。js 包装器加载位于同一目录中的文件,并在浏览器中运行时使用。index.wasmindex.js.wasmXMLHttpRequest

那么,如果我需要手动加载文件,该怎么办?加载部分在包装器中似乎是硬编码的。.wasm

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

  • 我需要从另一个网址(例如从CDN)提供文件。.wasm

  • 下载文件的 url 是动态生成的。.wasm

  • 代码在不允许的沙箱中运行,只有一个像 这样的API。XMLHttpRequestgetMyData('some_file')

  • 我需要将所有文件嵌入为base64字符串。

我知道我只能生成文件,通过.wasm

emcc -s WASM=1 main.cpp -o index.wasm

但是后来我失去了包装器,这在使用一些描述性API(如SDL和GLES)时并不容易。


一只名叫tom的猫
浏览 297回答 1
1回答

手掌心

AFIK,JS包装器调用fetch()而不是XHR。如果可用,可以使用服务工作线程来拦截该请求并返回所需的任何内容。您还可以修改Emscripten源代码(我有v1.39.13)以重写默认加载行为。在 文件中,根据自己的喜好修改函数 getBinaryPromise() 和 getBinary(),然后构建 ,以便在 WASM JS 包装器中具有自定义加载行为。$EMSDK/upstream/emscripten/src/preamble.jsemcc
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript