Emscripten: настройте сгенерированный js так, чтобы он загружал файл .wasm по своему усмотрению. - PullRequest
3 голосов
/ 07 мая 2020

При компиляции со следующими параметрами

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

emscripten генерирует index.wasm и js оболочку index.js. Обертка js загружает файл .wasm, расположенный в том же каталоге, используя XMLHttpRequest при запуске в браузере.

Итак, что мне делать, если мне нужно загрузить файл .wasm вручную? Часть загрузки кажется жестко запрограммированной в оболочке.

Вот некоторые обстоятельства, когда мне это нужно:

  • Мне нужно обслуживать файл .wasm с другого URL-адреса (например, из CDN).
  • URL для загрузки файла .wasm создается динамически.
  • Код работает в песочнице, где XMLHttpRequest не допускается, есть только API, например getMyData('some_file').
  • I нужно встроить все файлы как строку base64.

Я знаю, что могу сгенерировать только файл .wasm,

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

Но тогда я теряет оболочку, что нетривиально при использовании некоторых API-интерфейсов emscripten, таких как SDL и GLES.

1 Ответ

1 голос
/ 08 мая 2020

AFIK, оболочка JS вызывает fetch (), а не XHR. Если возможно, вы можете использовать Service Worker, чтобы перехватить этот запрос и вернуть все, что захотите.

Вы также можете изменить исходный код Emscripten (у меня v1.39.13), чтобы переписать поведение загрузки по умолчанию. В файле $EMSDK/upstream/emscripten/src/preamble.js измените функции getBinaryPromise() и getBinary() по своему вкусу, а затем создайте с помощью emcc, чтобы иметь собственное поведение загрузки в оболочке WASM JS. .

...