Browse Source

Remove the try/catch in the worker thread

Popov72 5 years ago
parent
commit
f48a06b7e2
2 changed files with 26 additions and 27 deletions
  1. 14 12
      ktx2Decoder/src/ktx2Decoder.ts
  2. 12 15
      src/Misc/khronosTextureContainer2.ts

+ 14 - 12
ktx2Decoder/src/ktx2Decoder.ts

@@ -68,23 +68,25 @@ export class KTX2Decoder {
     }
 
     public decode(data: Uint8Array, caps: ICompressedFormatCapabilities): Promise<IDecodedData | null> {
-        const kfr = new KTX2FileReader(data);
+        return Promise.resolve().then(() => {
+            const kfr = new KTX2FileReader(data);
 
-        if (!kfr.isValid()) {
-            throw new Error("Invalid KT2 file: wrong signature");
-        }
+            if (!kfr.isValid()) {
+                throw new Error("Invalid KT2 file: wrong signature");
+            }
 
-        kfr.parse();
+            kfr.parse();
 
-        if (kfr.needZSTDDecoder && !this._zstdDecoder) {
-            this._zstdDecoder = new ZSTDDecoder();
+            if (kfr.needZSTDDecoder && !this._zstdDecoder) {
+                this._zstdDecoder = new ZSTDDecoder();
 
-            return this._zstdDecoder.init().then(() => {
-                return this._decodeData(kfr, caps);
-            });
-        }
+                return this._zstdDecoder.init().then(() => {
+                    return this._decodeData(kfr, caps);
+                });
+            }
 
-        return this._decodeData(kfr, caps);
+            return this._decodeData(kfr, caps);
+        });
     }
 
     private _decodeData(kfr: KTX2FileReader, caps: ICompressedFormatCapabilities): Promise<IDecodedData> {

+ 12 - 15
src/Misc/khronosTextureContainer2.ts

@@ -259,22 +259,19 @@ export function workerFunc(): void {
                 postMessage({ action: "init" });
                 break;
             case "decode":
-                try {
-                    ktx2Decoder.decode(event.data.data, event.data.caps).then((data: any) => {
-                        const buffers = [];
-                        for (let mip = 0; mip < data.mipmaps.length; ++mip) {
-                            const mipmap = data.mipmaps[mip];
-                            if (mipmap && mipmap.data) {
-                                buffers.push(mipmap.data.buffer);
-                            }
+                ktx2Decoder.decode(event.data.data, event.data.caps).then((data: any) => {
+                    const buffers = [];
+                    for (let mip = 0; mip < data.mipmaps.length; ++mip) {
+                        const mipmap = data.mipmaps[mip];
+                        if (mipmap && mipmap.data) {
+                            buffers.push(mipmap.data.buffer);
                         }
-                        postMessage({ action: "decoded", success: true, decodedData: data }, buffers);
-                    }).catch((reason: any) => {
-                        postMessage({ action: "decoded", success: false, msg: reason });
-                    });
-                } catch (err) {
-                    postMessage({ action: "decoded", success: false, msg: err });
-                }
+                    }
+                    postMessage({ action: "decoded", success: true, decodedData: data }, buffers);
+                }).catch((reason: any) => {
+                    console.log("here");
+                    postMessage({ action: "decoded", success: false, msg: reason });
+                });
                 break;
         }
     };