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

Allow to load wasm binaries from the worker thread

Popov72 5 лет назад
Родитель
Сommit
5015ff51af
2 измененных файлов с 22 добавлено и 5 удалено
  1. 10 3
      src/Misc/KTX2/KTX2WorkerThreadJS.ts
  2. 12 2
      src/Misc/KTX2/wasmMemoryManager.ts

+ 10 - 3
src/Misc/KTX2/KTX2WorkerThreadJS.ts

@@ -82,9 +82,15 @@ export function workerFunc() {
             this._memoryView = new Uint8Array(this._memory.buffer, this._memoryViewOffset, this._memoryViewByteLength);
         }
         WASMMemoryManager.LoadWASM = function (path) {
-            var _this = this;
+            if (!this.LoadBinariesFromMainThread) {
+                return new Promise(function (resolve) {
+                    fetch(path)
+                        .then(function (response) { return response.arrayBuffer(); })
+                        .then(function (wasmBinary) { return resolve(wasmBinary); });
+                });
+            }
+            var id = this._RequestId++;
             return new Promise(function (resolve) {
-                var id = _this._RequestId++;
                 var wasmLoadedHandler = function (msg) {
                     if (msg.data.action === "wasmLoaded" && msg.data.id === id) {
                         self.removeEventListener("message", wasmLoadedHandler);
@@ -119,10 +125,11 @@ export function workerFunc() {
             }
             return this._memoryView;
         };
+        WASMMemoryManager.LoadBinariesFromMainThread = false;
         WASMMemoryManager._RequestId = 0;
         return WASMMemoryManager;
     }());
-                    
+                        
     /**
      * TranscoderManager
      */

+ 12 - 2
src/Misc/KTX2/wasmMemoryManager.ts

@@ -5,12 +5,22 @@ declare function postMessage(message: any, transfer?: any[]): void;
  */
 export class WASMMemoryManager {
 
+    public static LoadBinariesFromMainThread = false;
+
     private static _RequestId = 0;
 
     public static LoadWASM(path: string): Promise<ArrayBuffer> {
-        return new Promise((resolve) => {
-            const id = this._RequestId++;
+        if (!this.LoadBinariesFromMainThread) {
+            return new Promise((resolve) => {
+                fetch(path)
+                .then((response) => response.arrayBuffer())
+                .then((wasmBinary) => resolve(wasmBinary));
+            });
+        }
 
+        const id = this._RequestId++;
+
+        return new Promise((resolve) => {
             const wasmLoadedHandler = (msg: any) => {
                 if (msg.data.action === "wasmLoaded" && msg.data.id === id) {
                     self.removeEventListener("message", wasmLoadedHandler);