{"version":3,"file":"ObjectRendererSystem.mjs","sources":["../../src/render/ObjectRendererSystem.ts"],"sourcesContent":["import { extensions, ExtensionType } from 'pixijs/extensions';\n\nimport type { ExtensionMetadata } from 'pixijs/extensions';\nimport type { Matrix } from 'pixijs/math';\nimport type { IRenderableObject, IRendererRenderOptions } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { RenderTexture } from '../renderTexture/RenderTexture';\nimport type { ISystem } from '../system/ISystem';\n\n/**\n * system that provides a render function that focussing on rendering Pixi Scene Graph objects\n * to either the main view or to a renderTexture.  Used for Canvas `WebGL` contexts\n * @memberof PIXI\n */\nexport class ObjectRendererSystem implements ISystem\n{\n    /** @ignore */\n    static extension: ExtensionMetadata = {\n        type: ExtensionType.RendererSystem,\n        name: 'objectRenderer',\n    };\n\n    renderer: Renderer;\n\n    /**\n     * Flag if we are rendering to the screen vs renderTexture\n     * @readonly\n     * @default true\n     */\n    renderingToScreen: boolean;\n\n    /**\n     * the last object rendered by the renderer. Useful for other plugins like interaction managers\n     * @readonly\n     */\n    lastObjectRendered: IRenderableObject;\n\n    // renderers scene graph!\n    constructor(renderer: Renderer)\n    {\n        this.renderer = renderer;\n    }\n\n    /**\n     * Renders the object to its WebGL view.\n     * @param displayObject - The object to be rendered.\n     * @param options - the options to be passed to the renderer\n     */\n    render(displayObject: IRenderableObject, options?: IRendererRenderOptions): void\n    {\n        const renderer = this.renderer;\n\n        let renderTexture: RenderTexture;\n        let clear: boolean;\n        let transform: Matrix;\n        let skipUpdateTransform: boolean;\n\n        if (options)\n        {\n            renderTexture = options.renderTexture;\n            clear = options.clear;\n            transform = options.transform;\n            skipUpdateTransform = options.skipUpdateTransform;\n        }\n\n        // can be handy to know!\n        this.renderingToScreen = !renderTexture;\n\n        renderer.runners.prerender.emit();\n        renderer.emit('prerender');\n\n        // apply a transform at a GPU level\n        renderer.projection.transform = transform;\n\n        // no point rendering if our context has been blown up!\n        if (renderer.context.isLost)\n        {\n            return;\n        }\n\n        if (!renderTexture)\n        {\n            this.lastObjectRendered = displayObject;\n        }\n\n        if (!skipUpdateTransform)\n        {\n            // update the scene graph\n            const cacheParent = displayObject.enableTempParent();\n\n            displayObject.updateTransform();\n            displayObject.disableTempParent(cacheParent);\n            // displayObject.hitArea = //TODO add a temp hit area\n        }\n\n        renderer.renderTexture.bind(renderTexture);\n        renderer.batch.currentRenderer.start();\n\n        if (clear ?? renderer.background.clearBeforeRender)\n        {\n            renderer.renderTexture.clear();\n        }\n\n        displayObject.render(renderer);\n\n        // apply transform..\n        renderer.batch.currentRenderer.flush();\n\n        if (renderTexture)\n        {\n            if (options.blit)\n            {\n                renderer.framebuffer.blit();\n            }\n\n            renderTexture.baseTexture.update();\n        }\n\n        renderer.runners.postrender.emit();\n\n        // reset transform after render\n        renderer.projection.transform = null;\n\n        renderer.emit('postrender');\n    }\n\n    destroy(): void\n    {\n        // ka pow!\n        this.renderer = null;\n        this.lastObjectRendered = null;\n    }\n}\n\nextensions.add(ObjectRendererSystem);\n"],"names":[],"mappings":";;AAcO,MAAM,oBACb,CAAA;AAAA,EAuBI,YAAY,QACZ,EAAA;AACI,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAAA,GACpB;AAAA,EAOA,MAAA,CAAO,eAAkC,OACzC,EAAA;AACI,IAAA,MAAM,WAAW,IAAK,CAAA,QAAA,CAAA;AAEtB,IAAI,IAAA,aAAA,CAAA;AACJ,IAAI,IAAA,KAAA,CAAA;AACJ,IAAI,IAAA,SAAA,CAAA;AACJ,IAAI,IAAA,mBAAA,CAAA;AAEJ,IAAA,IAAI,OACJ,EAAA;AACI,MAAA,aAAA,GAAgB,OAAQ,CAAA,aAAA,CAAA;AACxB,MAAA,KAAA,GAAQ,OAAQ,CAAA,KAAA,CAAA;AAChB,MAAA,SAAA,GAAY,OAAQ,CAAA,SAAA,CAAA;AACpB,MAAA,mBAAA,GAAsB,OAAQ,CAAA,mBAAA,CAAA;AAAA,KAClC;AAGA,IAAA,IAAA,CAAK,oBAAoB,CAAC,aAAA,CAAA;AAE1B,IAAS,QAAA,CAAA,OAAA,CAAQ,UAAU,IAAK,EAAA,CAAA;AAChC,IAAA,QAAA,CAAS,KAAK,WAAW,CAAA,CAAA;AAGzB,IAAA,QAAA,CAAS,WAAW,SAAY,GAAA,SAAA,CAAA;AAGhC,IAAI,IAAA,QAAA,CAAS,QAAQ,MACrB,EAAA;AACI,MAAA,OAAA;AAAA,KACJ;AAEA,IAAA,IAAI,CAAC,aACL,EAAA;AACI,MAAA,IAAA,CAAK,kBAAqB,GAAA,aAAA,CAAA;AAAA,KAC9B;AAEA,IAAA,IAAI,CAAC,mBACL,EAAA;AAEI,MAAM,MAAA,WAAA,GAAc,cAAc,gBAAiB,EAAA,CAAA;AAEnD,MAAA,aAAA,CAAc,eAAgB,EAAA,CAAA;AAC9B,MAAA,aAAA,CAAc,kBAAkB,WAAW,CAAA,CAAA;AAAA,KAE/C;AAEA,IAAS,QAAA,CAAA,aAAA,CAAc,KAAK,aAAa,CAAA,CAAA;AACzC,IAAS,QAAA,CAAA,KAAA,CAAM,gBAAgB,KAAM,EAAA,CAAA;AAErC,IAAI,IAAA,KAAA,IAAS,QAAS,CAAA,UAAA,CAAW,iBACjC,EAAA;AACI,MAAA,QAAA,CAAS,cAAc,KAAM,EAAA,CAAA;AAAA,KACjC;AAEA,IAAA,aAAA,CAAc,OAAO,QAAQ,CAAA,CAAA;AAG7B,IAAS,QAAA,CAAA,KAAA,CAAM,gBAAgB,KAAM,EAAA,CAAA;AAErC,IAAA,IAAI,aACJ,EAAA;AACI,MAAA,IAAI,QAAQ,IACZ,EAAA;AACI,QAAA,QAAA,CAAS,YAAY,IAAK,EAAA,CAAA;AAAA,OAC9B;AAEA,MAAA,aAAA,CAAc,YAAY,MAAO,EAAA,CAAA;AAAA,KACrC;AAEA,IAAS,QAAA,CAAA,OAAA,CAAQ,WAAW,IAAK,EAAA,CAAA;AAGjC,IAAA,QAAA,CAAS,WAAW,SAAY,GAAA,IAAA,CAAA;AAEhC,IAAA,QAAA,CAAS,KAAK,YAAY,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,OACA,GAAA;AAEI,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAChB,IAAA,IAAA,CAAK,kBAAqB,GAAA,IAAA,CAAA;AAAA,GAC9B;AACJ,CAAA;AAtHa,qBAGF,SAA+B,GAAA;AAAA,EAClC,MAAM,aAAc,CAAA,cAAA;AAAA,EACpB,IAAM,EAAA,gBAAA;AACV,CAAA,CAAA;AAkHJ,UAAA,CAAW,IAAI,oBAAoB,CAAA;;;;"}