{"version":3,"file":"CanvasTextureSystem.mjs","sources":["../../../../../src/rendering/renderers/canvas/texture/CanvasTextureSystem.ts"],"sourcesContent":["import { DOMAdapter } from '../../../../environment/adapter';\nimport { ExtensionType } from '../../../../extensions/Extensions';\nimport { canvasUtils } from '../utils/canvasUtils';\n\nimport type { ICanvas } from '../../../../environment/canvas/ICanvas';\nimport type { System } from '../../shared/system/System';\nimport type { CanvasGenerator, GetPixelsOutput } from '../../shared/texture/GenerateCanvas';\nimport type { TextureSource } from '../../shared/texture/sources/TextureSource';\nimport type { Texture } from '../../shared/texture/Texture';\nimport type { CanvasRenderer } from '../CanvasRenderer';\n\n/**\n * Texture helper system for CanvasRenderer.\n * @category rendering\n * @advanced\n */\nexport class CanvasTextureSystem implements System, CanvasGenerator\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.CanvasSystem,\n        ],\n        name: 'texture',\n    } as const;\n\n    /**\n     * @param renderer - The owning CanvasRenderer.\n     */\n    constructor(renderer: CanvasRenderer)\n    {\n        void renderer;\n    }\n\n    /** Initializes the system (no-op for canvas). */\n    public init(): void\n    {\n        // no-op\n    }\n\n    /**\n     * Initializes a texture source (no-op for canvas).\n     * @param _source - Texture source.\n     */\n    public initSource(_source: TextureSource): void\n    {\n        // no-op for canvas\n    }\n\n    /**\n     * Creates a canvas containing the texture's frame.\n     * @param texture - Texture to render.\n     */\n    public generateCanvas(texture: Texture): ICanvas\n    {\n        const canvas = DOMAdapter.get().createCanvas();\n        const context = canvas.getContext('2d');\n        const source = canvasUtils.getCanvasSource(texture);\n\n        if (!source)\n        {\n            return canvas;\n        }\n\n        const frame = texture.frame;\n        const resolution = texture.source._resolution ?? texture.source.resolution ?? 1;\n\n        const sx = frame.x * resolution;\n        const sy = frame.y * resolution;\n        const sw = frame.width * resolution;\n        const sh = frame.height * resolution;\n\n        canvas.width = Math.ceil(sw);\n        canvas.height = Math.ceil(sh);\n\n        context.drawImage(\n            source,\n            sx,\n            sy,\n            sw,\n            sh,\n            0,\n            0,\n            sw,\n            sh\n        );\n\n        return canvas;\n    }\n\n    /**\n     * Reads pixel data from a texture.\n     * @param texture - Texture to read.\n     */\n    public getPixels(texture: Texture): GetPixelsOutput\n    {\n        const canvas = this.generateCanvas(texture);\n        const context = canvas.getContext('2d', { willReadFrequently: true });\n        const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n\n        return {\n            pixels: imageData.data,\n            width: canvas.width,\n            height: canvas.height,\n        };\n    }\n\n    /** Destroys the system (no-op for canvas). */\n    public destroy(): void\n    {\n        // no-op\n    }\n}\n"],"names":[],"mappings":";;;;;AAgBO,MAAM,mBAAA,CACb;AAAA;AAAA;AAAA;AAAA,EAYI,YAAY,QAAA,EACZ;AACI,IAAA,KAAK,QAAA;AAAA,EACT;AAAA;AAAA,EAGO,IAAA,GACP;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,WAAW,OAAA,EAClB;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,eAAe,OAAA,EACtB;AACI,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,EAAI,CAAE,YAAA,EAAa;AAC7C,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AACtC,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,eAAA,CAAgB,OAAO,CAAA;AAElD,IAAA,IAAI,CAAC,MAAA,EACL;AACI,MAAA,OAAO,MAAA;AAAA,IACX;AAEA,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,aAAa,OAAA,CAAQ,MAAA,CAAO,WAAA,IAAe,OAAA,CAAQ,OAAO,UAAA,IAAc,CAAA;AAE9E,IAAA,MAAM,EAAA,GAAK,MAAM,CAAA,GAAI,UAAA;AACrB,IAAA,MAAM,EAAA,GAAK,MAAM,CAAA,GAAI,UAAA;AACrB,IAAA,MAAM,EAAA,GAAK,MAAM,KAAA,GAAQ,UAAA;AACzB,IAAA,MAAM,EAAA,GAAK,MAAM,MAAA,GAAS,UAAA;AAE1B,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA;AAC3B,IAAA,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA;AAE5B,IAAA,OAAA,CAAQ,SAAA;AAAA,MACJ,MAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,CAAA;AAAA,MACA,CAAA;AAAA,MACA,EAAA;AAAA,MACA;AAAA,KACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,UAAU,OAAA,EACjB;AACI,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,OAAO,CAAA;AAC1C,IAAA,MAAM,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,EAAE,kBAAA,EAAoB,MAAM,CAAA;AACpE,IAAA,MAAM,SAAA,GAAY,QAAQ,YAAA,CAAa,CAAA,EAAG,GAAG,MAAA,CAAO,KAAA,EAAO,OAAO,MAAM,CAAA;AAExE,IAAA,OAAO;AAAA,MACH,QAAQ,SAAA,CAAU,IAAA;AAAA,MAClB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,QAAQ,MAAA,CAAO;AAAA,KACnB;AAAA,EACJ;AAAA;AAAA,EAGO,OAAA,GACP;AAAA,EAEA;AACJ;AAAA;AAhGa,mBAAA,CAGK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AACV,CAAA;;;;"}