Hi,

On 04/04/2020 18:37, George Evmenov wrote:
> I recently ported big C++ application into webassembly and the only
> issue I have so far is filesystem's .data file size.
> What I need is to load some resources only on request (fopen call or
> something similar) from the C++ code, but I can't change all places in
> C++ code where files are opened to make them use asynchronous load or
> some JS code.
>
> What I've found is that there is FS.createLazyFile, but it works only
> in web worker. I tried dumb approach with moving whole generated .js
> file into worker and it fails with "ReferenceError: screen is not
> defined". As far as I understand my whole app can't be moved into web
> worker, because it does rendering. (note: I'm newbie in the web and js
> related stuff and might be missing something simple)
>
> So my questions are:
> - is it possible to load resources on demand without changing the C++
> code that opens files? I'm ok with making main thread/render stop
> while it is loading.
I believe it'd be possible to implement a custom Emscripten filesystem
that, leveraging ASYNCIFY, could pause execution, download the file
on-demand and then resume.
I dropped this option for RenPyWeb (game engine web port), because that
would make the whole application unresponsive in case of network issue
during a fopen().
There's something in development called "asmfs" in emscripten that may
be close, but it's not very clear what its goal is.
> - if first is not possible could it be possible to add files into
> filesystem after the app was started, from the C++ code? All files,
> that need to be added are located near the .html .js and other files.

In RenPyWeb I initialize the FS with a small core .data, then download
and extract an additional game.zip file, and then I download some other
files in advance through emscripten_run_script, XMLHttpRequest and
FS.writeFile({canOwn:true}) (to save memory).
See https://github.com/renpy/renpy/blob/master/renpy/webloader.py

emscripten_wget* functions may be more straightforward. I didn't use
them because of various asynchronicity issues.

Beware of memory usage, and avoid LZ4 for your .data because that makes
files read-only.

Hope this helps!
Sylvain

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/emscripten-discuss/fa677436-0141-b2b2-dd63-4d8282384b01%40beuc.net.

Reply via email to