簡體   English   中英

Emscripten:自定義生成的js,使其以自定義方式加載.wasm文件

[英]Emscripten: Customize the generated js so it loads the .wasm file in a custom way

通過使用以下選項進行編譯,

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

emscripten 生成一個index.wasm和一個 js 包裝器index.js js 包裝器在瀏覽器中運行時使用XMLHttpRequest加載位於同一目錄中的.wasm文件。

那么如果我需要手動加載.wasm文件該怎么辦呢? 加載部分在包裝器中似乎是硬編碼的。

以下是我需要這個的一些情況:

  • 我需要從另一個 url(例如來自 CDN)提供.wasm文件。
  • 下載.wasm文件的url是動態生成的。
  • 該代碼在不允許XMLHttpRequest的沙箱中運行,只有 API 像getMyData('some_file')
  • 我需要將所有文件嵌入為 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 包裝器中自定義加載行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM