{"version":3,"file":"PrepareQueue.mjs","sources":["../../src/prepare/PrepareQueue.ts"],"sourcesContent":["import { TextureSource } from '../rendering/renderers/shared/texture/sources/TextureSource';\nimport { Texture } from '../rendering/renderers/shared/texture/Texture';\nimport { Container } from '../scene/container/Container';\nimport { Graphics } from '../scene/graphics/shared/Graphics';\nimport { GraphicsContext } from '../scene/graphics/shared/GraphicsContext';\nimport { Mesh } from '../scene/mesh/shared/Mesh';\nimport { Sprite } from '../scene/sprite/Sprite';\nimport { AnimatedSprite } from '../scene/sprite-animated/AnimatedSprite';\nimport { TilingSprite } from '../scene/sprite-tiling/TilingSprite';\nimport { Text } from '../scene/text/Text';\nimport { PrepareBase } from './PrepareBase';\n\nimport type { FillInstruction, TextureInstruction } from '../scene/graphics/shared/GraphicsContext';\nimport type { FrameObject } from '../scene/sprite-animated/AnimatedSprite';\nimport type { PrepareQueueItem, PrepareSourceItem } from './PrepareBase';\n\n/**\n * Part of the prepare system. Responsible for uploading all the items to the GPU.\n * This class extends the base functionality and resolves given resource items ready for the queue.\n * @category rendering\n * @advanced\n */\nexport abstract class PrepareQueue extends PrepareBase\n{\n    /**\n     * Resolve the given resource type and return an item for the queue\n     * @param source\n     * @param queue\n     */\n    protected resolveQueueItem(source: PrepareSourceItem, queue: PrepareQueueItem[]): void\n    {\n        if (source instanceof Container)\n        {\n            this.resolveContainerQueueItem(source, queue);\n        }\n        else if (source instanceof TextureSource || source instanceof Texture)\n        {\n            queue.push(source.source);\n        }\n        else if (source instanceof GraphicsContext)\n        {\n            queue.push(source);\n        }\n\n        // could not resolve the resource type\n        return null;\n    }\n\n    /**\n     * Resolve the given container and return an item for the queue\n     * @param container\n     * @param queue\n     */\n    protected resolveContainerQueueItem(container: Container, queue: PrepareQueueItem[]): void\n    {\n        // Note: we are just concerned with the given view.\n        // Children are handled by the recursive call of the base class\n\n        if (container instanceof Sprite || container instanceof TilingSprite || container instanceof Mesh)\n        {\n            queue.push(container.texture.source);\n        }\n        else if (container instanceof Text)\n        {\n            queue.push(container);\n        }\n        else if (container instanceof Graphics)\n        {\n            queue.push(container.context);\n        }\n        else if (container instanceof AnimatedSprite)\n        {\n            container.textures.forEach((textureOrFrame) =>\n            {\n                if ((textureOrFrame as Texture).source)\n                {\n                    queue.push((textureOrFrame as Texture).source);\n                }\n                else\n                {\n                    queue.push((textureOrFrame as FrameObject).texture.source);\n                }\n            });\n        }\n    }\n\n    /**\n     * Resolve the given graphics context and return an item for the queue\n     * @param graphicsContext\n     */\n    protected resolveGraphicsContextQueueItem(graphicsContext: GraphicsContext): PrepareQueueItem | null\n    {\n        this.renderer.graphicsContext.getGpuContext(graphicsContext);\n\n        const { instructions } = graphicsContext;\n\n        for (const instruction of instructions)\n        {\n            if (instruction.action === 'texture')\n            {\n                const { image } = (instruction as TextureInstruction).data;\n\n                return image.source;\n            }\n            else if (instruction.action === 'fill')\n            {\n                const { texture } = (instruction as FillInstruction).data.style;\n\n                return texture.source;\n            }\n        }\n\n        return null;\n    }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAsBO,MAAe,qBAAqB,WAAA,CAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMc,gBAAA,CAAiB,QAA2B,KAAA,EACtD;AACI,IAAA,IAAI,kBAAkB,SAAA,EACtB;AACI,MAAA,IAAA,CAAK,yBAAA,CAA0B,QAAQ,KAAK,CAAA;AAAA,IAChD,CAAA,MAAA,IACS,MAAA,YAAkB,aAAA,IAAiB,MAAA,YAAkB,OAAA,EAC9D;AACI,MAAA,KAAA,CAAM,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,IAC5B,CAAA,MAAA,IACS,kBAAkB,eAAA,EAC3B;AACI,MAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,IACrB;AAGA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,yBAAA,CAA0B,WAAsB,KAAA,EAC1D;AAII,IAAA,IAAI,SAAA,YAAqB,MAAA,IAAU,SAAA,YAAqB,YAAA,IAAgB,qBAAqB,IAAA,EAC7F;AACI,MAAA,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,MAAM,CAAA;AAAA,IACvC,CAAA,MAAA,IACS,qBAAqB,IAAA,EAC9B;AACI,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,IACxB,CAAA,MAAA,IACS,qBAAqB,QAAA,EAC9B;AACI,MAAA,KAAA,CAAM,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,IAChC,CAAA,MAAA,IACS,qBAAqB,cAAA,EAC9B;AACI,MAAA,SAAA,CAAU,QAAA,CAAS,OAAA,CAAQ,CAAC,cAAA,KAC5B;AACI,QAAA,IAAK,eAA2B,MAAA,EAChC;AACI,UAAA,KAAA,CAAM,IAAA,CAAM,eAA2B,MAAM,CAAA;AAAA,QACjD,CAAA,MAEA;AACI,UAAA,KAAA,CAAM,IAAA,CAAM,cAAA,CAA+B,OAAA,CAAQ,MAAM,CAAA;AAAA,QAC7D;AAAA,MACJ,CAAC,CAAA;AAAA,IACL;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMU,gCAAgC,eAAA,EAC1C;AACI,IAAA,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,aAAA,CAAc,eAAe,CAAA;AAE3D,IAAA,MAAM,EAAE,cAAa,GAAI,eAAA;AAEzB,IAAA,KAAA,MAAW,eAAe,YAAA,EAC1B;AACI,MAAA,IAAI,WAAA,CAAY,WAAW,SAAA,EAC3B;AACI,QAAA,MAAM,EAAE,KAAA,EAAM,GAAK,WAAA,CAAmC,IAAA;AAEtD,QAAA,OAAO,KAAA,CAAM,MAAA;AAAA,MACjB,CAAA,MAAA,IACS,WAAA,CAAY,MAAA,KAAW,MAAA,EAChC;AACI,QAAA,MAAM,EAAE,OAAA,EAAQ,GAAK,WAAA,CAAgC,IAAA,CAAK,KAAA;AAE1D,QAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,MACnB;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;;;;"}