Runtime WASM Loading
The basic use of Wasmbox has a WASM/WAT file imported in the editor, to produce a WasmAsset which can be loaded at runtime. However sometimes it is necessary to load a WASM file at runtime, for example loading mods from a folder. This can be done with the DynamicWasmAsset
or a custom IWasmAsset
.
Dynamic Wasm Asset
The DynamicWasmAsset
provides a way to create a WasmAsset at runtime from a file that was never processed in the editor. It can be loaded from raw WASM bytes, or Web Assembly Text format.
WASM Bytes
A DynamicWasmAsset
can be loaded from WASM bytes stored in memory, or in a file.
- In Memory (Byte Array)
- File
byte[] some_wasm_bytes = GetWasmFromSomewhere();
DynamicWasmAsset.FromWASM(some_wasm_bytes);
string path = "path/to/some.wasm";
DynamicWasmAsset.FromPathWASM(path);
WAT Text
A DynamicWasmAsset
can be loaded from WAT text stored in memory, or in a file.
- In Memory (string)
- File
string wat = "(module (memory 1) (func))";
DynamicWasmAsset.FromWAT(wat);
string path = "path/to/some.wat";
DynamicWasmAsset.FromPathWAT(path);
Caching
When a WasmAsset is compiled into a LoadedModule it is cached in memory, to speed up subsequent loads of the same asset. A DynamicWasmAsset
may opt-in to this behaviour by setting the cacheKey
. The loaded module will be cached under this unique ID, later attempts to load another asset with the same cache key will load the original module.
Only enable caching if the same module is likely to be reloaded several times.
Do not enable caching if is possible for the module to change!
More Customisation
If a DynamicWasmAsset
does not meet your use-case, consider creating a custom IWasmAsset
implementation. This will give you complete control over how a Module
is constructed.