Skip to content

Commit

Permalink
Fix KTX2 loading without workers
Browse files Browse the repository at this point in the history
  • Loading branch information
sebavan committed Sep 3, 2021
1 parent 9d85c30 commit 22441b0
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
24 changes: 24 additions & 0 deletions ktx2Decoder/src/Transcoders/mscTranscoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,30 @@ export class MSCTranscoder extends Transcoder {
if (MSCTranscoder.UseFromWorkerThread) {
importScripts(MSCTranscoder.JSModuleURL);
}
// Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.
else if (typeof(MSC_TRANSCODER) === "undefined") {
return new Promise((resolve, reject) => {
const head = document.getElementsByTagName("head")[0];
const script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", MSCTranscoder.JSModuleURL);

script.onload = () => {
MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {
basisModule.initTranscoders();
this._mscBasisModule = basisModule;
resolve();
});
};

script.onerror = () => {
reject("Can not load MSC_TRANSCODER script.");
};

head.appendChild(script);
});
}

return new Promise((resolve) => {
MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {
basisModule.initTranscoders();
Expand Down
46 changes: 46 additions & 0 deletions src/Misc/khronosTextureContainer2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { InternalTexture } from "../Materials/Textures/internalTexture";
import { ThinEngine } from "../Engines/thinEngine";
import { Constants } from '../Engines/constants';
import { WorkerPool } from './workerPool';
import { Tools } from "./tools";

declare var KTX2DECODER: any;

Expand All @@ -10,6 +11,7 @@ declare var KTX2DECODER: any;
*/
export class KhronosTextureContainer2 {
private static _WorkerPoolPromise?: Promise<WorkerPool>;
private static _NoWorkerPromise?: Promise<void>;
private static _Initialized: boolean;
private static _Ktx2Decoder: any; // used when no worker pool is used

Expand Down Expand Up @@ -95,6 +97,34 @@ export class KhronosTextureContainer2 {
resolve(new WorkerPool(workers));
});
});
} else if (typeof(KTX2DECODER) === "undefined") {
KhronosTextureContainer2._NoWorkerPromise = Tools.LoadScriptAsync(KhronosTextureContainer2.URLConfig.jsDecoderModule).then(() => {
KTX2DECODER.MSCTranscoder.UseFromWorkerThread = false;
KTX2DECODER.WASMMemoryManager.LoadBinariesFromCurrentThread = true;

const urls = KhronosTextureContainer2.URLConfig;
if (urls.wasmUASTCToASTC !== null) {
KTX2DECODER.LiteTranscoder_UASTC_ASTC.WasmModuleURL = urls.wasmUASTCToASTC;
}
if (urls.wasmUASTCToBC7 !== null) {
KTX2DECODER.LiteTranscoder_UASTC_BC7.WasmModuleURL = urls.wasmUASTCToBC7;
}
if (urls.wasmUASTCToRGBA_UNORM !== null) {
KTX2DECODER.LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL = urls.wasmUASTCToRGBA_UNORM;
}
if (urls.wasmUASTCToRGBA_SRGB !== null) {
KTX2DECODER.LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL = urls.wasmUASTCToRGBA_SRGB;
}
if (urls.jsMSCTranscoder !== null) {
KTX2DECODER.MSCTranscoder.JSModuleURL = urls.jsMSCTranscoder;
}
if (urls.wasmMSCTranscoder !== null) {
KTX2DECODER.MSCTranscoder.WasmModuleURL = urls.wasmMSCTranscoder;
}
if (urls.wasmZSTDDecoder !== null) {
KTX2DECODER.ZSTDDecoder.WasmModuleURL = urls.wasmZSTDDecoder;
}
});
} else {
KTX2DECODER.MSCTranscoder.UseFromWorkerThread = false;
KTX2DECODER.WASMMemoryManager.LoadBinariesFromCurrentThread = true;
Expand Down Expand Up @@ -165,6 +195,22 @@ export class KhronosTextureContainer2 {
});
});
}
else if (KhronosTextureContainer2._NoWorkerPromise) {
return KhronosTextureContainer2._NoWorkerPromise.then(() => {
return new Promise((resolve, reject) => {
if (!KhronosTextureContainer2._Ktx2Decoder) {
KhronosTextureContainer2._Ktx2Decoder = new KTX2DECODER.KTX2Decoder();
}

KhronosTextureContainer2._Ktx2Decoder.decode(data, caps).then((data: any) => {
this._createTexture(data, internalTexture);
resolve();
}).catch((reason: any) => {
reject({ message: reason });
});
});
});
}

return new Promise((resolve, reject) => {
if (!KhronosTextureContainer2._Ktx2Decoder) {
Expand Down

0 comments on commit 22441b0

Please sign in to comment.