{"version":3,"file":"gpuUploadImageSource.mjs","sources":["../../../../../../src/rendering/renderers/gpu/texture/uploaders/gpuUploadImageSource.ts"],"sourcesContent":["import { DOMAdapter } from '../../../../../environment/adapter';\nimport { warn } from '../../../../../utils/logging/warn';\n\nimport type { TextureSource } from '../../../shared/texture/sources/TextureSource';\nimport type { GPU } from '../../GpuDeviceSystem';\nimport type { GpuTextureUploader } from './GpuTextureUploader';\n\n/** @internal */\nexport const gpuUploadImageResource = {\n\n    type: 'image',\n\n    upload(source: TextureSource, gpuTexture: GPUTexture, gpu: GPU, originZOverride = 0)\n    {\n        const resource = source.resource as ImageBitmap | HTMLCanvasElement | OffscreenCanvas | HTMLImageElement;\n\n        if (!resource) return;\n\n        // WebGPU does not support HTMLImageElement\n        // so we need to convert it to a canvas\n        if (globalThis.HTMLImageElement && resource instanceof HTMLImageElement)\n        {\n            const canvas = DOMAdapter.get().createCanvas(resource.width, resource.height);\n            const context = canvas.getContext('2d');\n\n            context.drawImage(resource, 0, 0, resource.width, resource.height);\n\n            // replace with the canvas - for future uploads\n            source.resource = canvas;\n\n            // #if _DEBUG\n            warn('ImageSource: Image element passed, converting to canvas and replacing resource.');\n            // #endif\n        }\n\n        const width = Math.min(gpuTexture.width, source.resourceWidth || source.pixelWidth);\n        const height = Math.min(gpuTexture.height, source.resourceHeight || source.pixelHeight);\n\n        const premultipliedAlpha = source.alphaMode === 'premultiply-alpha-on-upload';\n\n        gpu.device.queue.copyExternalImageToTexture(\n            { source: resource },\n            { texture: gpuTexture, origin: { x: 0, y: 0, z: originZOverride }, premultipliedAlpha },\n            {\n                width,\n                height,\n            }\n        );\n    }\n} as GpuTextureUploader<TextureSource>;\n\n"],"names":[],"mappings":";;;;AAQO,MAAM,sBAAA,GAAyB;AAAA,EAElC,IAAA,EAAM,OAAA;AAAA,EAEN,MAAA,CAAO,MAAA,EAAuB,UAAA,EAAwB,GAAA,EAAU,kBAAkB,CAAA,EAClF;AACI,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AAExB,IAAA,IAAI,CAAC,QAAA,EAAU;AAIf,IAAA,IAAI,UAAA,CAAW,gBAAA,IAAoB,QAAA,YAAoB,gBAAA,EACvD;AACI,MAAA,MAAM,MAAA,GAAS,WAAW,GAAA,EAAI,CAAE,aAAa,QAAA,CAAS,KAAA,EAAO,SAAS,MAAM,CAAA;AAC5E,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAEtC,MAAA,OAAA,CAAQ,UAAU,QAAA,EAAU,CAAA,EAAG,GAAG,QAAA,CAAS,KAAA,EAAO,SAAS,MAAM,CAAA;AAGjE,MAAA,MAAA,CAAO,QAAA,GAAW,MAAA;AAGlB,MAAA,IAAA,CAAK,iFAAiF,CAAA;AAAA,IAE1F;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,UAAA,CAAW,OAAO,MAAA,CAAO,aAAA,IAAiB,OAAO,UAAU,CAAA;AAClF,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,UAAA,CAAW,QAAQ,MAAA,CAAO,cAAA,IAAkB,OAAO,WAAW,CAAA;AAEtF,IAAA,MAAM,kBAAA,GAAqB,OAAO,SAAA,KAAc,6BAAA;AAEhD,IAAA,GAAA,CAAI,OAAO,KAAA,CAAM,0BAAA;AAAA,MACb,EAAE,QAAQ,QAAA,EAAS;AAAA,MACnB,EAAE,OAAA,EAAS,UAAA,EAAY,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,eAAA,EAAgB,EAAG,kBAAA,EAAmB;AAAA,MACtF;AAAA,QACI,KAAA;AAAA,QACA;AAAA;AACJ,KACJ;AAAA,EACJ;AACJ;;;;"}