UNPKG

@pixi/core

Version:
1 lines 4.88 kB
{"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;"}