Просмотр исходного кода

MikkTSpace: Add `dispose()`, cache promise. (#33501)

Co-authored-by: Michael Herzog <michael.herzog@human-interactive.org>
Shane 1 месяц назад
Родитель
Сommit
062a743fa7
1 измененных файлов с 34 добавлено и 9 удалено
  1. 34 9
      examples/jsm/libs/mikktspace.module.js

+ 34 - 9
examples/jsm/libs/mikktspace.module.js

@@ -117,12 +117,37 @@ export let wasm;
 
 export let isReady = false;
 
-export const ready = fetch(wasmDataURI)
-    .then((res) => res.arrayBuffer())
-    .then((buffer) => WebAssembly.instantiate(buffer, {
-        './mikktspace_module_bg.js': {__wbindgen_string_new, __wbindgen_rethrow}
-    }))
-    .then((result) => {
-        wasm = result.instance.exports;
-        isReady = true;
-    });
+let readyPromise = null;
+
+function initialize() {
+
+	return fetch( wasmDataURI )
+		.then( ( res ) => res.arrayBuffer() )
+		.then( ( buffer ) => WebAssembly.instantiate( buffer, {
+			'./mikktspace_module_bg.js': { __wbindgen_string_new, __wbindgen_rethrow }
+		} ) )
+		.then( ( result ) => {
+
+			wasm = result.instance.exports;
+			isReady = true;
+
+		} );
+
+}
+
+export const ready = {
+	then: function ( onFulfilled, onRejected ) {
+
+		if ( readyPromise === null ) readyPromise = initialize();
+		return readyPromise.then( onFulfilled, onRejected );
+
+	}
+};
+
+export function dispose() {
+
+	wasm = null;
+	isReady = false;
+	readyPromise = null;
+
+}

粤ICP备19079148号