{"version":3,"file":"ObjectRendererSystem.mjs","sources":["../../src/render/ObjectRendererSystem.ts"],"sourcesContent":["import { extensions, ExtensionType } from '@pixi/extensions';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Matrix } from '@pixi/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,qBACb;AAAA;AAAA,EAuBI,YAAY,UACZ;AACI,SAAK,WAAW;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,eAAkC,SACzC;AACI,UAAM,WAAW,KAAK;AAElB,QAAA,eACA,OACA,WACA;AAoBJ,QAlBI,YAEA,gBAAgB,QAAQ,eACxB,QAAQ,QAAQ,OAChB,YAAY,QAAQ,WACpB,sBAAsB,QAAQ,sBAIlC,KAAK,oBAAoB,CAAC,eAE1B,SAAS,QAAQ,UAAU,KAAK,GAChC,SAAS,KAAK,WAAW,GAGzB,SAAS,WAAW,YAAY,WAG5B,CAAA,SAAS,QAAQ,QAUrB;AAAA,UALK,kBAED,KAAK,qBAAqB,gBAG1B,CAAC,qBACL;AAEU,cAAA,cAAc,cAAc;AAElC,sBAAc,gBAAgB,GAC9B,cAAc,kBAAkB,WAAW;AAAA,MAE/C;AAES,eAAA,cAAc,KAAK,aAAa,GACzC,SAAS,MAAM,gBAAgB,UAE3B,SAAS,SAAS,WAAW,sBAE7B,SAAS,cAAc,MAAM,GAGjC,cAAc,OAAO,QAAQ,GAG7B,SAAS,MAAM,gBAAgB,MAE3B,GAAA,kBAEI,QAAQ,QAER,SAAS,YAAY,KAAK,GAG9B,cAAc,YAAY,WAG9B,SAAS,QAAQ,WAAW,KAG5B,GAAA,SAAS,WAAW,YAAY,MAEhC,SAAS,KAAK,YAAY;AAAA,IAAA;AAAA,EAC9B;AAAA,EAEA,UACA;AAES,SAAA,WAAW,MAChB,KAAK,qBAAqB;AAAA,EAC9B;AACJ;AAtHa,qBAGF,YAA+B;AAAA,EAClC,MAAM,cAAc;AAAA,EACpB,MAAM;AACV;AAkHJ,WAAW,IAAI,oBAAoB;"}