diff --git a/src/core/CoreTextureManager.ts b/src/core/CoreTextureManager.ts index 180d807a..1fda233f 100644 --- a/src/core/CoreTextureManager.ts +++ b/src/core/CoreTextureManager.ts @@ -209,21 +209,16 @@ export class CoreTextureManager extends EventEmitter { this.hasWorker && numImageWorkers > 0 ) { - const imageWorkers = new ImageWorkerManager(numImageWorkers, result); - - // wait for the image worker manager to be initialized - imageWorkers.once('initialized', () => { - // enable image worker manager - this.imageWorkerManager = imageWorkers; - }); + this.imageWorkerManager = new ImageWorkerManager( + numImageWorkers, + result, + ); } else { console.warn( '[Lightning] Imageworker is 0 or not supported on this browser. Image loading will be slower.', ); } - // Do an early init event, we don't need to wait for the image worker manager to be initialized. - // Loading textures will be done on the main thread from this point on until the image worker manager is ready. this.emit('initialized'); }) .catch((e) => { diff --git a/src/core/lib/ImageWorker.ts b/src/core/lib/ImageWorker.ts index 0281953f..6e8e73da 100644 --- a/src/core/lib/ImageWorker.ts +++ b/src/core/lib/ImageWorker.ts @@ -17,7 +17,6 @@ * limitations under the License. */ -import { EventEmitter } from '../../common/EventEmitter.js'; import type { CreateImageBitmapSupport } from '../CoreTextureManager.js'; import { type TextureData } from '../textures/Texture.js'; @@ -138,14 +137,6 @@ function createImageWorker() { } self.onmessage = (event) => { - if (event.data.type === 'init') { - // Store support level sent from the main thread - supportsOptionsCreateImageBitmap = event.data.support.config; - supportsFullCreateImageBitmap = event.data.support.full; - self.postMessage({ initialized: true }); - return; - } - var src = event.data.src; var id = event.data.id; var premultiplyAlpha = event.data.premultiplyAlpha; @@ -165,7 +156,7 @@ function createImageWorker() { } /* eslint-enable */ -export class ImageWorkerManager extends EventEmitter { +export class ImageWorkerManager { imageWorkersEnabled = true; messageManager: Record = {}; workers: Worker[] = []; @@ -176,7 +167,6 @@ export class ImageWorkerManager extends EventEmitter { numImageWorkers: number, createImageBitmapSupport: CreateImageBitmapSupport, ) { - super(); this.workers = this.createWorkers( numImageWorkers, createImageBitmapSupport, @@ -187,12 +177,6 @@ export class ImageWorkerManager extends EventEmitter { } private handleMessage(event: MessageEvent) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - if (event.data?.initialized) { - this.emit('initialized'); - return; - } - const { id, data, error } = event.data as ImageWorkerMessage; const msg = this.messageManager[id]; if (msg) { @@ -210,7 +194,19 @@ export class ImageWorkerManager extends EventEmitter { numWorkers = 1, createImageBitmapSupport: CreateImageBitmapSupport, ): Worker[] { - const workerCode = `(${createImageWorker.toString()})()`; + let workerCode = `(${createImageWorker.toString()})()`; + + // Replace placeholders with actual initialization values + const supportsOptions = createImageBitmapSupport.options ? 'true' : 'false'; + const supportsFull = createImageBitmapSupport.full ? 'true' : 'false'; + workerCode = workerCode.replace( + 'var supportsOptionsCreateImageBitmap = false;', + `var supportsOptionsCreateImageBitmap = ${supportsOptions};`, + ); + workerCode = workerCode.replace( + 'var supportsFullCreateImageBitmap = false;', + `var supportsFullCreateImageBitmap = ${supportsFull};`, + ); const blob: Blob = new Blob([workerCode.replace('"use strict";', '')], { type: 'application/javascript',