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

问题描述 投票:3回答:1

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

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

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

因此,如果需要手动加载.wasm文件,该怎么办?加载部分似乎在包装器中进行了硬编码。

在某些情况下,我需要此:

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

我知道我只能通过以下方式生成.wasm文件:>

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

但是然后我丢失了包装器,当使用某些脚本化API(如SDL和GLES)时,包装器并不简单。

通过使用以下选项进行编译,emcc -s WASM = 1 main.cpp -o index.js emscripten生成index.wasm和js包装器index.js。 js包装器加载位于相同.... >>>

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

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

javascript webassembly emscripten
1个回答
1
投票

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.