{"version":3,"file":"CanvasPrepare.mjs","sources":["../src/CanvasPrepare.ts"],"sourcesContent":["import { BaseTexture, extensions, ExtensionType, settings } from 'pixijs/core';\nimport { BasePrepare } from 'pixijs/prepare';\n\nimport type { CanvasRenderer } from 'pixijs/renderer/canvas';\nimport type { ExtensionMetadata, ICanvas, ICanvasRenderingContext2D, IRenderer, ISystem } from 'pixijs/core';\nimport type { IDisplayObjectExtended } from 'pixijs/prepare';\n\nconst CANVAS_START_SIZE = 16;\n\n/**\n * Built-in hook to upload PIXI.Texture objects to the GPU.\n * @private\n * @param prepare - Instance of CanvasPrepare\n * @param item - Item to check\n * @returns If item was uploaded.\n */\nfunction uploadBaseTextures(prepare: IRenderer | BasePrepare, item: IDisplayObjectExtended): boolean\n{\n    const tempPrepare = prepare as CanvasPrepare;\n\n    if (item instanceof BaseTexture)\n    {\n        const image = (item as any).source;\n\n        // Sometimes images (like atlas images) report a size of zero, causing errors on windows phone.\n        // So if the width or height is equal to zero then use the canvas size\n        // Otherwise use whatever is smaller, the image dimensions or the canvas dimensions.\n        const imageWidth = image.width === 0 ? tempPrepare.canvas.width : Math.min(tempPrepare.canvas.width, image.width);\n        const imageHeight = image.height === 0 ? tempPrepare.canvas.height\n            : Math.min(tempPrepare.canvas.height, image.height);\n\n        // Only a small subsections is required to be drawn to have the whole texture uploaded to the GPU\n        // A smaller draw can be faster.\n        tempPrepare.ctx.drawImage(\n            image, 0, 0, imageWidth, imageHeight, 0, 0,\n            tempPrepare.canvas.width, tempPrepare.canvas.height\n        );\n\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * The prepare manager provides functionality to upload content to the GPU.\n *\n * This cannot be done directly for Canvas like in WebGL, but the effect can be achieved by drawing\n * textures to an offline canvas. This draw call will force the texture to be moved onto the GPU.\n *\n * An instance of this class is automatically created by default, and can be found at `renderer.prepare`\n * @class\n * @extends PIXI.BasePrepare\n * @memberof PIXI\n */\nexport class CanvasPrepare extends BasePrepare implements ISystem\n{\n    /** @ignore */\n    static extension: ExtensionMetadata = {\n        name: 'prepare',\n        type: ExtensionType.CanvasRendererSystem,\n    };\n\n    /**\n     * An offline canvas to render textures to\n     * @internal\n     */\n    canvas: ICanvas;\n    /**\n     * The context to the canvas\n     * @internal\n     */\n    ctx: ICanvasRenderingContext2D;\n\n    /**\n     * @param renderer - A reference to the current renderer\n     */\n    constructor(renderer: CanvasRenderer)\n    {\n        super(renderer);\n\n        this.uploadHookHelper = this;\n\n        this.canvas = settings.ADAPTER.createCanvas(\n            CANVAS_START_SIZE,\n            CANVAS_START_SIZE\n        );\n\n        this.ctx = this.canvas.getContext('2d');\n\n        // Add textures to upload\n        this.registerUploadHook(uploadBaseTextures);\n    }\n\n    /** Destroys the plugin, don't use after this */\n    public destroy(): void\n    {\n        super.destroy();\n        this.ctx = null;\n        this.canvas = null;\n    }\n}\n\nextensions.add(CanvasPrepare);\n"],"names":[],"mappings":";;;AAOA,MAAM,iBAAoB,GAAA,EAAA,CAAA;AAS1B,SAAA,kBAAA,CAA4B,SAAkC,IAC9D,EAAA;AACI,EAAA,MAAM,WAAc,GAAA,OAAA,CAAA;AAEpB,EAAA,IAAI,gBAAgB,WACpB,EAAA;AACI,IAAA,MAAM,QAAS,IAAa,CAAA,MAAA,CAAA;AAK5B,IAAA,MAAM,UAAa,GAAA,KAAA,CAAM,KAAU,KAAA,CAAA,GAAI,WAAY,CAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAK,GAAI,CAAA,WAAA,CAAY,MAAO,CAAA,KAAA,EAAO,MAAM,KAAK,CAAA,CAAA;AAChH,IAAA,MAAM,WAAc,GAAA,KAAA,CAAM,MAAW,KAAA,CAAA,GAAI,WAAY,CAAA,MAAA,CAAO,MACtD,GAAA,IAAA,CAAK,GAAI,CAAA,WAAA,CAAY,MAAO,CAAA,MAAA,EAAQ,MAAM,MAAM,CAAA,CAAA;AAItD,IAAA,WAAA,CAAY,GAAI,CAAA,SAAA,CACZ,KAAO,EAAA,CAAA,EAAG,GAAG,UAAY,EAAA,WAAA,EAAa,CAAG,EAAA,CAAA,EACzC,WAAY,CAAA,MAAA,CAAO,KAAO,EAAA,WAAA,CAAY,OAAO,MACjD,CAAA,CAAA;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACX;AAEA,EAAO,OAAA,KAAA,CAAA;AACX,CAAA;AAaO,MAAM,sBAAsB,WACnC,CAAA;AAAA,EAqBI,YAAY,QACZ,EAAA;AACI,IAAA,KAAA,CAAM,QAAQ,CAAA,CAAA;AAEd,IAAA,IAAA,CAAK,gBAAmB,GAAA,IAAA,CAAA;AAExB,IAAA,IAAA,CAAK,MAAS,GAAA,QAAA,CAAS,OAAQ,CAAA,YAAA,CAC3B,mBACA,iBACJ,CAAA,CAAA;AAEA,IAAA,IAAA,CAAK,GAAM,GAAA,IAAA,CAAK,MAAO,CAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAGtC,IAAA,IAAA,CAAK,mBAAmB,kBAAkB,CAAA,CAAA;AAAA,GAC9C;AAAA,EAGA,OACA,GAAA;AACI,IAAA,KAAA,CAAM,OAAQ,EAAA,CAAA;AACd,IAAA,IAAA,CAAK,GAAM,GAAA,IAAA,CAAA;AACX,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AAAA,GAClB;AACJ,CAAA;AA9Ca,cAGF,SAA+B,GAAA;AAAA,EAClC,IAAM,EAAA,SAAA;AAAA,EACN,MAAM,aAAc,CAAA,oBAAA;AACxB,CAAA,CAAA;AA0CJ,UAAA,CAAW,IAAI,aAAa,CAAA;;;;"}