mirror of
https://github.com/godotengine/godot.git
synced 2025-10-26 03:04:31 +00:00
JS synchronous start, better persistent FS sync.
The engine now expects to emscripten FS to be setup and sync-ed before main is called. This is exposed via `Module["initFS"]` which also allows to setup multiple persistence paths (internal use only for now). Additionally, FS syncing is done **once** for every loop if at least one file in a persistent path was open for writing and closed, and if the FS is not syncing already. This should potentially fix issues reported by users where "autosave" would not work on the web (never calling `syncfs` because of too many writes).
This commit is contained in:
parent
53f04aa1b9
commit
dccd71c7a3
5 changed files with 107 additions and 73 deletions
|
|
@ -33,6 +33,7 @@ Function('return this')()['Engine'] = (function() {
|
|||
this.resizeCanvasOnStart = false;
|
||||
this.onExecute = null;
|
||||
this.onExit = null;
|
||||
this.persistentPaths = [];
|
||||
};
|
||||
|
||||
Engine.prototype.init = /** @param {string=} basePath */ function(basePath) {
|
||||
|
|
@ -56,12 +57,14 @@ Function('return this')()['Engine'] = (function() {
|
|||
config['locateFile'] = Utils.createLocateRewrite(loadPath);
|
||||
config['instantiateWasm'] = Utils.createInstantiatePromise(loadPromise);
|
||||
Godot(config).then(function(module) {
|
||||
me.rtenv = module;
|
||||
if (unloadAfterInit) {
|
||||
unload();
|
||||
}
|
||||
resolve();
|
||||
config = null;
|
||||
module['initFS'](me.persistentPaths).then(function(fs_err) {
|
||||
me.rtenv = module;
|
||||
if (unloadAfterInit) {
|
||||
unload();
|
||||
}
|
||||
resolve();
|
||||
config = null;
|
||||
});
|
||||
});
|
||||
});
|
||||
return initPromise;
|
||||
|
|
@ -220,6 +223,10 @@ Function('return this')()['Engine'] = (function() {
|
|||
this.rtenv['copyToFS'](path, buffer);
|
||||
};
|
||||
|
||||
Engine.prototype.setPersistentPaths = function(persistentPaths) {
|
||||
this.persistentPaths = persistentPaths;
|
||||
};
|
||||
|
||||
// Closure compiler exported engine methods.
|
||||
/** @export */
|
||||
Engine['isWebGLAvailable'] = Utils.isWebGLAvailable;
|
||||
|
|
@ -241,5 +248,6 @@ Function('return this')()['Engine'] = (function() {
|
|||
Engine.prototype['setOnExecute'] = Engine.prototype.setOnExecute;
|
||||
Engine.prototype['setOnExit'] = Engine.prototype.setOnExit;
|
||||
Engine.prototype['copyToFS'] = Engine.prototype.copyToFS;
|
||||
Engine.prototype['setPersistentPaths'] = Engine.prototype.setPersistentPaths;
|
||||
return Engine;
|
||||
})();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue