UNPKG

5.82 kBSource Map (JSON)View Raw
1{"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,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;;;;"}
\No newline at end of file