1 line
14 KiB
Plaintext
1 line
14 KiB
Plaintext
{"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';\n\nimport type { Instruction } from '../../rendering/renderers/shared/instructions/Instruction';\nimport type { Container } from './Container';\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 * @memberof rendering\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\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 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 this.addChild(children[i]);\n }\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\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 // SHOULD THIS BE HERE?\n public updateRenderable(container: Container)\n {\n // only update if its visible!\n if (container.globalDisplayStatus < 0b111) return;\n\n container.didViewUpdate = false;\n // actually updates the renderable..\n this.instructionSet.renderPipes[container.renderPipeId].updateRenderable(container);\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()\n {\n for (let i = 0; i < this._onRenderContainers.length; i++)\n {\n this._onRenderContainers[i]._onRender();\n }\n }\n\n public destroy()\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"],"names":[],"mappings":"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"} |