diff --git a/examples/jsm/loaders/KTX2Loader.js b/examples/jsm/loaders/KTX2Loader.js index 5370e8af16064d937231514c3f17e323b10e3465..0ddc6786c472563e799dddf915a4ff104cd7e412 100644 --- a/examples/jsm/loaders/KTX2Loader.js +++ b/examples/jsm/loaders/KTX2Loader.js @@ -68,6 +68,7 @@ class KTX2Loader extends CompressedTextureLoader { super( manager ); this.basisModule = null; + this.basisModulePending = null; this.transcoderConfig = {}; @@ -88,14 +89,20 @@ class KTX2Loader extends CompressedTextureLoader { } - init () { + initModule () { + + if ( this.basisModulePending ) { + + return; + + } var scope = this; // The Emscripten wrapper returns a fake Promise, which can cause // infinite recursion when mixed with native Promises. Wrap the module // initialization to return a native Promise. - return new Promise( function ( resolve ) { + scope.basisModulePending = new Promise( function ( resolve ) { MSC_TRANSCODER().then( function ( basisModule ) { @@ -126,7 +133,9 @@ class KTX2Loader extends CompressedTextureLoader { } ); - Promise.all( [ bufferPending, this.init() ] ).then( function ( [ buffer ] ) { + this.initModule(); + + Promise.all( [ bufferPending, this.basisModulePending ] ).then( function ( [ buffer ] ) { scope.parse( buffer, function ( _texture ) {