pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 23 kB
Source Map (JSON)
{"version":3,"file":"RenderGroup.mjs","sources":["../../../src/scene/container/RenderGroup.ts"],"sourcesContent":["import { Matrix } from '../../maths/matrix/Matrix';\nimport { InstructionSet } from '../../rendering/renderers/shared/instructions/InstructionSet';\nimport { TexturePool } from '../../rendering/renderers/shared/texture/TexturePool';\nimport { type Renderer } from '../../rendering/renderers/types';\n\nimport type { Instruction } from '../../rendering/renderers/shared/instructions/Instruction';\nimport type { Texture } from '../../rendering/renderers/shared/texture/Texture';\nimport type { BatchableSprite } from '../sprite/BatchableSprite';\nimport type { ViewContainer } from '../view/ViewContainer';\nimport type { Bounds } from './bounds/Bounds';\nimport type { Container } from './Container';\n\n/**\n * Options for caching a container as a texture.\n * @category rendering\n * @advanced\n */\nexport interface CacheAsTextureOptions\n{\n /**\n * If true, the texture will be antialiased. This smooths out the edges of the texture.\n * @default false\n */\n antialias?: boolean;\n /**\n * The resolution of the texture. A higher resolution means a sharper texture but uses more memory.\n * By default the resolution is 1 which is the same as the rendererers resolution.\n */\n resolution?: number;\n}\n\n/**\n * A RenderGroup is a class that is responsible for I generating a set of instructions that are used to render the\n * root container and its children. It also watches for any changes in that container or its children,\n * these changes are analysed and either the instruction set is rebuild or the instructions data is updated.\n * @category rendering\n * @advanced\n */\nexport class RenderGroup implements Instruction\n{\n public renderPipeId = 'renderGroup';\n public root: Container = null;\n\n public canBundle = false;\n\n public renderGroupParent: RenderGroup = null;\n public renderGroupChildren: RenderGroup[] = [];\n\n public worldTransform: Matrix = new Matrix();\n public worldColorAlpha = 0xffffffff;\n public worldColor = 0xffffff;\n public worldAlpha = 1;\n\n // these updates are transform changes..\n public readonly childrenToUpdate: Record<number, { list: Container[]; index: number; }> = Object.create(null);\n public updateTick = 0;\n public gcTick = 0;\n\n // these update are renderable changes..\n public readonly childrenRenderablesToUpdate: { list: Container[]; index: number; } = { list: [], index: 0 };\n\n // other\n public structureDidChange = true;\n\n public instructionSet: InstructionSet = new InstructionSet();\n\n private readonly _onRenderContainers: Container[] = [];\n\n /**\n * Indicates if the cached texture needs to be updated.\n * @default true\n */\n public textureNeedsUpdate = true;\n\n /**\n * Indicates if the container should be cached as a texture.\n * @default false\n */\n public isCachedAsTexture = false;\n\n /**\n * The texture used for caching the container. this is only set if isCachedAsTexture is true.\n * It can only be accessed after a render pass.\n * @type {Texture | undefined}\n */\n public texture?: Texture;\n\n /**\n * The bounds of the cached texture.\n * @type {Bounds | undefined}\n * @ignore\n */\n public _textureBounds?: Bounds;\n\n /**\n * The options for caching the container as a texture.\n * @type {CacheAsTextureOptions}\n */\n public textureOptions: CacheAsTextureOptions;\n\n /**\n * holds a reference to the batchable render sprite\n * @ignore\n */\n public _batchableRenderGroup: BatchableSprite;\n\n /**\n * Holds a reference to the closest parent RenderGroup that has isCachedAsTexture enabled.\n * This is used to properly transform coordinates when rendering into cached textures.\n * @type {RenderGroup | null}\n * @ignore\n */\n public _parentCacheAsTextureRenderGroup: RenderGroup;\n\n private _inverseWorldTransform: Matrix;\n private _textureOffsetInverseTransform: Matrix;\n private _inverseParentTextureTransform: Matrix;\n\n private _matrixDirty = 0b111;\n\n public init(root: Container)\n {\n this.root = root;\n\n if (root._onRender) this.addOnRender(root);\n\n root.didChange = true;\n\n const children = root.children;\n\n for (let i = 0; i < children.length; i++)\n {\n const child = children[i];\n\n // make sure the children are all updated on the first pass..\n child._updateFlags = 0b1111;\n\n this.addChild(child);\n }\n }\n\n public enableCacheAsTexture(options: CacheAsTextureOptions = {}): void\n {\n this.textureOptions = options;\n this.isCachedAsTexture = true;\n this.textureNeedsUpdate = true;\n }\n\n public disableCacheAsTexture(): void\n {\n this.isCachedAsTexture = false;\n if (this.texture)\n {\n TexturePool.returnTexture(this.texture);\n this.texture = null;\n }\n }\n\n public updateCacheTexture(): void\n {\n this.textureNeedsUpdate = true;\n }\n\n public reset()\n {\n this.renderGroupChildren.length = 0;\n\n for (const i in this.childrenToUpdate)\n {\n const childrenAtDepth = this.childrenToUpdate[i];\n\n childrenAtDepth.list.fill(null);\n childrenAtDepth.index = 0;\n }\n\n this.childrenRenderablesToUpdate.index = 0;\n this.childrenRenderablesToUpdate.list.fill(null);\n\n this.root = null;\n this.updateTick = 0;\n this.structureDidChange = true;\n\n this._onRenderContainers.length = 0;\n this.renderGroupParent = null;\n\n this.disableCacheAsTexture();\n }\n\n get localTransform()\n {\n return this.root.localTransform;\n }\n\n public addRenderGroupChild(renderGroupChild: RenderGroup)\n {\n if (renderGroupChild.renderGroupParent)\n {\n renderGroupChild.renderGroupParent._removeRenderGroupChild(renderGroupChild);\n }\n\n renderGroupChild.renderGroupParent = this;\n\n this.renderGroupChildren.push(renderGroupChild);\n }\n\n private _removeRenderGroupChild(renderGroupChild: RenderGroup)\n {\n const index = this.renderGroupChildren.indexOf(renderGroupChild);\n\n if (index > -1)\n {\n this.renderGroupChildren.splice(index, 1);\n }\n\n renderGroupChild.renderGroupParent = null;\n }\n\n public addChild(child: Container)\n {\n this.structureDidChange = true;\n\n child.parentRenderGroup = this;\n\n child.updateTick = -1;\n\n if (child.parent === this.root)\n {\n child.relativeRenderGroupDepth = 1;\n }\n else\n {\n child.relativeRenderGroupDepth = child.parent.relativeRenderGroupDepth + 1;\n }\n\n child.didChange = true;\n this.onChildUpdate(child);\n\n if (child.renderGroup)\n {\n this.addRenderGroupChild(child.renderGroup);\n\n return;\n }\n\n if (child._onRender) this.addOnRender(child);\n\n const children = child.children;\n\n for (let i = 0; i < children.length; i++)\n {\n this.addChild(children[i]);\n }\n }\n\n public removeChild(child: Container)\n {\n // remove all the children...\n this.structureDidChange = true;\n\n if (child._onRender)\n {\n // Remove the child to the onRender list under the following conditions:\n // 1. If the child is not a render group.\n // 2. If the child is a render group root of this render group - which it can't be removed from in this case.\n if (!child.renderGroup)\n {\n this.removeOnRender(child);\n }\n }\n\n child.parentRenderGroup = null;\n\n if (child.renderGroup)\n {\n this._removeRenderGroupChild(child.renderGroup);\n\n return;\n }\n\n const children = child.children;\n\n for (let i = 0; i < children.length; i++)\n {\n this.removeChild(children[i]);\n }\n }\n\n public removeChildren(children: Container[])\n {\n for (let i = 0; i < children.length; i++)\n {\n this.removeChild(children[i]);\n }\n }\n\n public onChildUpdate(child: Container)\n {\n let childrenToUpdate = this.childrenToUpdate[child.relativeRenderGroupDepth];\n\n if (!childrenToUpdate)\n {\n childrenToUpdate = this.childrenToUpdate[child.relativeRenderGroupDepth] = {\n index: 0,\n list: [],\n };\n }\n\n childrenToUpdate.list[childrenToUpdate.index++] = child;\n }\n\n public updateRenderable(renderable: ViewContainer)\n {\n if (renderable.globalDisplayStatus < 0b111) return;\n this.instructionSet.renderPipes[renderable.renderPipeId].updateRenderable(renderable);\n renderable.didViewUpdate = false;\n }\n\n public onChildViewUpdate(child: Container)\n {\n this.childrenRenderablesToUpdate.list[this.childrenRenderablesToUpdate.index++] = child;\n }\n\n get isRenderable(): boolean\n {\n return (this.root.localDisplayStatus === 0b111 && this.worldAlpha > 0);\n }\n\n /**\n * adding a container to the onRender list will make sure the user function\n * passed in to the user defined 'onRender` callBack\n * @param container - the container to add to the onRender list\n */\n public addOnRender(container: Container)\n {\n this._onRenderContainers.push(container);\n }\n\n public removeOnRender(container: Container)\n {\n this._onRenderContainers.splice(this._onRenderContainers.indexOf(container), 1);\n }\n\n public runOnRender(renderer: Renderer)\n {\n for (let i = 0; i < this._onRenderContainers.length; i++)\n {\n this._onRenderContainers[i]._onRender(renderer);\n }\n }\n\n public destroy()\n {\n this.disableCacheAsTexture();\n\n this.renderGroupParent = null;\n this.root = null;\n (this.childrenRenderablesToUpdate as any) = null;\n (this.childrenToUpdate as any) = null;\n (this.renderGroupChildren as any) = null;\n (this._onRenderContainers as any) = null;\n this.instructionSet = null;\n }\n\n public getChildren(out: Container[] = []): Container[]\n {\n const children = this.root.children;\n\n for (let i = 0; i < children.length; i++)\n {\n this._getChildren(children[i], out);\n }\n\n return out;\n }\n\n private _getChildren(container: Container, out: Container[] = []): Container[]\n {\n out.push(container);\n\n if (container.renderGroup) return out;\n\n const children = container.children;\n\n for (let i = 0; i < children.length; i++)\n {\n this._getChildren(children[i], out);\n }\n\n return out;\n }\n\n public invalidateMatrices()\n {\n this._matrixDirty = 0b111;\n }\n\n /**\n * Returns the inverse of the world transform matrix.\n * @returns {Matrix} The inverse of the world transform matrix.\n */\n public get inverseWorldTransform()\n {\n if ((this._matrixDirty & 0b001) === 0) return this._inverseWorldTransform;\n\n this._matrixDirty &= ~0b001;\n\n // TODO - add dirty flag\n this._inverseWorldTransform ||= new Matrix();\n\n return this._inverseWorldTransform\n .copyFrom(this.worldTransform)\n .invert();\n }\n\n /**\n * Returns the inverse of the texture offset transform matrix.\n * @returns {Matrix} The inverse of the texture offset transform matrix.\n */\n public get textureOffsetInverseTransform()\n {\n if ((this._matrixDirty & 0b010) === 0) return this._textureOffsetInverseTransform;\n\n this._matrixDirty &= ~0b010;\n\n this._textureOffsetInverseTransform ||= new Matrix();\n\n // TODO shared.. bad!\n return this._textureOffsetInverseTransform\n .copyFrom(this.inverseWorldTransform)\n .translate(\n -this._textureBounds.x,\n -this._textureBounds.y\n );\n }\n\n /**\n * Returns the inverse of the parent texture transform matrix.\n * This is used to properly transform coordinates when rendering into cached textures.\n * @returns {Matrix} The inverse of the parent texture transform matrix.\n */\n public get inverseParentTextureTransform()\n {\n if ((this._matrixDirty & 0b100) === 0) return this._inverseParentTextureTransform;\n\n this._matrixDirty &= ~0b100;\n\n const parentCacheAsTexture = this._parentCacheAsTextureRenderGroup;\n\n if (parentCacheAsTexture)\n {\n this._inverseParentTextureTransform ||= new Matrix();\n\n // Get relative transform by removing parent's world transform\n return this._inverseParentTextureTransform\n .copyFrom(this.worldTransform)\n .prepend(parentCacheAsTexture.inverseWorldTransform)\n // Offset by texture bounds\n .translate(\n -parentCacheAsTexture._textureBounds.x,\n -parentCacheAsTexture._textureBounds.y\n );\n }\n\n return this.worldTransform;\n }\n\n /**\n * Returns a matrix that transforms coordinates to the correct coordinate space of the texture being rendered to.\n * This is the texture offset inverse transform of the closest parent RenderGroup that is cached as a texture.\n * @returns {Matrix | null} The transform matrix for the cached texture coordinate space,\n * or null if no parent is cached as texture.\n */\n public get cacheToLocalTransform()\n {\n if (!this._parentCacheAsTextureRenderGroup) return null;\n\n return this._parentCacheAsTextureRenderGroup.textureOffsetInverseTransform;\n }\n}\n"],"names":[],"mappings":"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"}