From 6d744229b3e8a7714800f554cf2318fb34331546 Mon Sep 17 00:00:00 2001 From: Frank Weindel <6070611+frank-weindel@users.noreply.github.com> Date: Wed, 6 Dec 2023 22:16:01 -0500 Subject: [PATCH 1/5] Perf: Implement flag driven update dependency graph --- src/core/CoreNode.ts | 432 +++++++++++------- src/core/Stage.ts | 2 +- src/core/renderers/webgl/WebGlCoreRenderer.ts | 48 +- .../renderers/CanvasTextRenderer.ts | 6 +- 4 files changed, 291 insertions(+), 197 deletions(-) diff --git a/src/core/CoreNode.ts b/src/core/CoreNode.ts index dbbccd27..2822c636 100644 --- a/src/core/CoreNode.ts +++ b/src/core/CoreNode.ts @@ -17,7 +17,7 @@ * limitations under the License. */ -import { assertTruthy } from '../utils.js'; +import { assertTruthy, mergeColorAlphaPremultiplied } from '../utils.js'; import type { ShaderMap } from './CoreShaderManager.js'; import type { ExtractProps, @@ -37,7 +37,11 @@ import type { NodeTextureLoadedPayload, } from '../common/CommonTypes.js'; import { EventEmitter } from '../common/EventEmitter.js'; -import { intersectRect, type Rect } from './lib/utils.js'; +import { + getNormalizedAlphaComponent, + intersectRect, + type Rect, +} from './lib/utils.js'; import { Matrix3d } from './lib/Matrix3d.js'; export interface CoreNodeProps { @@ -82,17 +86,82 @@ type ICoreNode = Omit< 'texture' | 'textureOptions' | 'shader' | 'shaderProps' >; +enum UpdateType { + /** + * Child updates + */ + Children = 1, + + /** + * Scale/Rotate transform update + */ + ScaleRotate = 2, + + /** + * Translate transform update (x/y/width/height/pivot/mount) + */ + Local = 4, + + /** + * Global transform update + */ + Global = 8, + + /** + * Clipping rect update + */ + Clipping = 16, + + /** + * Calculated ZIndex update + */ + CalculatedZIndex = 32, + + /** + * Z-Index Sorted Children update + */ + ZIndexSortedChildren = 64, + + /** + * Premultiplied Colors + */ + PremultipliedColors = 128, + + /** + * World Alpha + * + * @remarks + * World Alpha = Parent World Alpha * Alpha + */ + WorldAlpha = 256, + + /** + * None + */ + None = 0, + + /** + * All + */ + All = 511, +} + export class CoreNode extends EventEmitter implements ICoreNode { readonly children: CoreNode[] = []; protected props: Required; - public recalculationType = 0; - public hasUpdates = true; + public updateType = UpdateType.All; public globalTransform?: Matrix3d; public scaleRotateTransform?: Matrix3d; public localTransform?: Matrix3d; public clippingRect: Rect | null = null; private parentClippingRect: Rect | null = null; + public worldAlpha = 1; + public premultipliedColorTl = 0; + public premultipliedColorTr = 0; + public premultipliedColorBl = 0; + public premultipliedColorBr = 0; + public calcZIndex = 0; private isComplex = false; @@ -173,64 +242,38 @@ export class CoreNode extends EventEmitter implements ICoreNode { this.props.shaderProps = p; } - setHasUpdates(): void { - this.hasUpdates = true; - } - - setChildrenHasUpdates(): void { - this.children.forEach((child) => { - child.setRecalculationType(2); - }); - } - - setParentHasUpdates(): void { - if (!this.props.parent) { - return; - } - - this.props.parent.setRecalculationType(1); - } - /** * Change types types is used to determine the scope of the changes being applied - * 1 - alpha recalculation - * 2 - translate recalculation - * 4 - transform recalculation - * 8 - z-index recalculation + * + * @remarks + * See {@link UpdateType} for more information on each type * * @param type */ - setRecalculationType(type: number): void { - this.recalculationType |= type; - this.setHasUpdates(); - - // always forcing parent updates so the root will have an hasUpdates flag - this.setParentHasUpdates(); - - if (type & 4) { - this.setChildrenHasUpdates(); + setUpdateType(type: UpdateType): void { + this.updateType |= type; + + // If we're updating this node at all, we need to inform the parent + // (and all ancestors) that their children need updating as well + const parent = this.props.parent; + if (parent && !(parent.updateType & UpdateType.Children)) { + parent.setUpdateType(UpdateType.Children); } } sortChildren() { - this.children.sort((a, b) => a.zIndex - b.zIndex); + this.children.sort((a, b) => a.calcZIndex - b.calcZIndex); } updateScaleRotateTransform() { - this.setRecalculationType(4); - this.scaleRotateTransform = Matrix3d.rotate( this.props.rotation, this.scaleRotateTransform, ).scale(this.props.scaleX, this.props.scaleY); - - // do transformations when matrix is implemented - this.updateLocalTransform(); } updateLocalTransform() { assertTruthy(this.scaleRotateTransform); - this.setRecalculationType(2); const pivotTranslateX = this.props.pivotX * this.props.width; const pivotTranslateY = this.props.pivotY * this.props.height; const mountTranslateX = this.props.mountX * this.props.width; @@ -243,6 +286,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { ) .multiply(this.scaleRotateTransform) .translate(-pivotTranslateX, -pivotTranslateY); + this.setUpdateType(UpdateType.Global); } /** @@ -250,45 +294,131 @@ export class CoreNode extends EventEmitter implements ICoreNode { * @param delta */ update(delta: number, parentClippingRect: Rect | null = null): void { - assertTruthy(this.localTransform); - const parentGlobalTransform = this.parent?.globalTransform; - if (parentGlobalTransform) { - this.globalTransform = Matrix3d.copy( - parentGlobalTransform, - this.globalTransform, - ).multiply(this.localTransform); - } else { - this.globalTransform = Matrix3d.copy( - this.localTransform, - this.globalTransform, - ); + if (this.updateType & UpdateType.ScaleRotate) { + this.updateScaleRotateTransform(); + this.setUpdateType(UpdateType.Local); } - this.calculateClippingRect(parentClippingRect); + if (this.updateType & UpdateType.Local) { + this.updateLocalTransform(); + this.setUpdateType(UpdateType.Global); + } - if (this.children.length) { - this.children.forEach((child) => { - child.update(delta, this.clippingRect); - }); + const parent = this.props.parent; + let childUpdateType = UpdateType.None; + if (this.updateType & UpdateType.Global) { + if (parent) { + assertTruthy(this.localTransform && parent.globalTransform); + this.globalTransform = Matrix3d.copy( + parent.globalTransform, + this.globalTransform, + ).multiply(this.localTransform); + childUpdateType |= UpdateType.Global; + this.setUpdateType(UpdateType.Clipping); + } else { + assertTruthy(this.localTransform); + this.globalTransform = Matrix3d.copy( + this.localTransform, + this.globalTransform, + ); + childUpdateType |= UpdateType.Global; + this.setUpdateType(UpdateType.Clipping | UpdateType.Children); + } + } + + if (this.updateType & UpdateType.Clipping) { + this.calculateClippingRect(parentClippingRect); + this.setUpdateType(UpdateType.Children); + childUpdateType |= UpdateType.Clipping; + } + + if (this.updateType & UpdateType.PremultipliedColors) { + if (parent) { + this.premultipliedColorTl = mergeColorAlphaPremultiplied( + this.props.colorTl, + this.props.alpha, + true, + ); + this.premultipliedColorTr = mergeColorAlphaPremultiplied( + this.props.colorTr, + this.props.alpha, + true, + ); + this.premultipliedColorBl = mergeColorAlphaPremultiplied( + this.props.colorBl, + this.props.alpha, + true, + ); + this.premultipliedColorBr = mergeColorAlphaPremultiplied( + this.props.colorBr, + this.props.alpha, + true, + ); + } else { + this.premultipliedColorTl = mergeColorAlphaPremultiplied( + this.props.colorTl, + this.props.alpha, + true, + ); + this.premultipliedColorTr = mergeColorAlphaPremultiplied( + this.props.colorTr, + this.props.alpha, + true, + ); + this.premultipliedColorBl = mergeColorAlphaPremultiplied( + this.props.colorBl, + this.props.alpha, + true, + ); + this.premultipliedColorBr = mergeColorAlphaPremultiplied( + this.props.colorBr, + this.props.alpha, + true, + ); + } + this.setUpdateType(UpdateType.Children); + childUpdateType |= UpdateType.PremultipliedColors; + } + + if (this.updateType & UpdateType.WorldAlpha) { + if (parent) { + this.worldAlpha = parent.worldAlpha * this.props.alpha; + } else { + this.worldAlpha = this.props.alpha; + } + this.setUpdateType(UpdateType.Children); + childUpdateType |= UpdateType.WorldAlpha; + } + + if (this.updateType & UpdateType.CalculatedZIndex) { + this.calculateZIndex(); + this.setUpdateType(UpdateType.ZIndexSortedChildren); } - if (this.recalculationType & 8) { + if (this.updateType & UpdateType.ZIndexSortedChildren) { // reorder z-index this.sortChildren(); } - // reset update flag - this.hasUpdates = false; + if (this.updateType & UpdateType.Children && this.children.length) { + this.children.forEach((child) => { + // If child has no updates, skip + if (child.updateType === 0) { + return; + } + // Trigger the depenedent update types on the child + child.setUpdateType(childUpdateType); + child.update(delta, this.clippingRect); + }); + } - // reset recalculation type - this.recalculationType = 0; + // reset update type + this.updateType = 0; } /** * This function calculates the clipping rectangle for a node. * - * If the node's globalTransform is not set, the function returns immediately. - * If the node's props do not require clipping and there is no parent clipping rectangle, the node's clipping rectangle is set to null. * If the parent clipping rectangle has not changed and the node's clipping rectangle is already set, the function returns immediately. * * The function then checks if the node is rotated. If the node requires clipping and is not rotated, a new clipping rectangle is created based on the node's global transform and dimensions. @@ -297,14 +427,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { * Finally, the node's parentClippingRect and clippingRect properties are updated. */ calculateClippingRect(parentClippingRect: Rect | null = null) { - if (!this.globalTransform) { - return; - } - - if (!this.props.clipping && !parentClippingRect) { - this.clippingRect = null; - return; - } + assertTruthy(this.globalTransform); if (this.parentClippingRect === parentClippingRect && this.clippingRect) { return; @@ -332,19 +455,37 @@ export class CoreNode extends EventEmitter implements ICoreNode { this.clippingRect = clippingRect; } + calculateZIndex(): void { + const props = this.props; + const z = props.zIndex || 0; + const p = props.parent?.zIndex || 0; + + let zIndex = z; + if (props.parent?.zIndexLocked) { + zIndex = z < p ? z : p; + } + this.calcZIndex = zIndex; + } + renderQuads(renderer: CoreRenderer): void { + const { width, height, texture, textureOptions, shader, shaderProps } = + this.props; const { - width, - height, - colorTl, - colorTr, - colorBl, - colorBr, - texture, - textureOptions, - shader, - shaderProps, - } = this.props; + premultipliedColorTl, + premultipliedColorTr, + premultipliedColorBl, + premultipliedColorBr, + } = this; + + if ( + premultipliedColorTl === 0 && + premultipliedColorTr === 0 && + premultipliedColorBl === 0 && + premultipliedColorBr === 0 + ) { + return; + } + const { zIndex, worldAlpha, globalTransform: gt, clippingRect } = this; assertTruthy(gt); @@ -353,10 +494,10 @@ export class CoreNode extends EventEmitter implements ICoreNode { renderer.addQuad({ width, height, - colorTl, - colorTr, - colorBl, - colorBr, + colorTl: premultipliedColorTl, + colorTr: premultipliedColorTr, + colorBl: premultipliedColorBl, + colorBr: premultipliedColorBr, texture, textureOptions, zIndex, @@ -388,7 +529,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set x(value: number) { if (this.props.x !== value) { this.props.x = value; - this.updateLocalTransform(); + this.setUpdateType(UpdateType.Local); } } @@ -410,7 +551,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set y(value: number) { if (this.props.y !== value) { this.props.y = value; - this.updateLocalTransform(); + this.setUpdateType(UpdateType.Local); } } @@ -421,7 +562,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set width(value: number) { if (this.props.width !== value) { this.props.width = value; - this.updateLocalTransform(); + this.setUpdateType(UpdateType.Local); } } @@ -432,7 +573,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set height(value: number) { if (this.props.height !== value) { this.props.height = value; - this.updateLocalTransform(); + this.setUpdateType(UpdateType.Local); } } @@ -456,7 +597,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set scaleX(value: number) { if (this.props.scaleX !== value) { this.props.scaleX = value; - this.updateScaleRotateTransform(); + this.setUpdateType(UpdateType.ScaleRotate); } } @@ -467,35 +608,21 @@ export class CoreNode extends EventEmitter implements ICoreNode { set scaleY(value: number) { if (this.props.scaleY !== value) { this.props.scaleY = value; - this.updateScaleRotateTransform(); + this.setUpdateType(UpdateType.ScaleRotate); } } - get worldScaleX(): number { - return ( - this.props.scaleX * (this.props.parent?.worldScaleX ?? 1) || - this.props.scaleX - ); - } - - get worldScaleY(): number { - return ( - this.props.scaleY * (this.props.parent?.worldScaleY ?? 1) || - this.props.scaleY - ); - } - get mount(): number { return this.props.mount; } set mount(value: number) { - // if (this.props.mountX !== value || this.props.mountY !== value) { - this.props.mountX = value; - this.props.mountY = value; - this.props.mount = value; - this.updateLocalTransform(); - // } + if (this.props.mountX !== value || this.props.mountY !== value) { + this.props.mountX = value; + this.props.mountY = value; + this.props.mount = value; + this.setUpdateType(UpdateType.Local); + } } get mountX(): number { @@ -503,8 +630,10 @@ export class CoreNode extends EventEmitter implements ICoreNode { } set mountX(value: number) { - this.props.mountX = value; - this.updateLocalTransform(); + if (this.props.mountX !== value) { + this.props.mountX = value; + this.setUpdateType(UpdateType.Local); + } } get mountY(): number { @@ -512,8 +641,10 @@ export class CoreNode extends EventEmitter implements ICoreNode { } set mountY(value: number) { - this.props.mountY = value; - this.updateLocalTransform(); + if (this.props.mountY !== value) { + this.props.mountY = value; + this.setUpdateType(UpdateType.Local); + } } get pivot(): number { @@ -524,7 +655,8 @@ export class CoreNode extends EventEmitter implements ICoreNode { if (this.props.pivotX !== value || this.props.pivotY !== value) { this.props.pivotX = value; this.props.pivotY = value; - this.updateLocalTransform(); + this.props.pivot = value; + this.setUpdateType(UpdateType.Local); } } @@ -533,8 +665,10 @@ export class CoreNode extends EventEmitter implements ICoreNode { } set pivotX(value: number) { - this.props.pivotX = value; - this.updateLocalTransform(); + if (this.props.pivotX !== value) { + this.props.pivotX = value; + this.setUpdateType(UpdateType.Local); + } } get pivotY(): number { @@ -542,8 +676,10 @@ export class CoreNode extends EventEmitter implements ICoreNode { } set pivotY(value: number) { - this.props.pivotY = value; - this.updateLocalTransform(); + if (this.props.pivotY !== value) { + this.props.pivotY = value; + this.setUpdateType(UpdateType.Local); + } } get rotation(): number { @@ -553,7 +689,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set rotation(value: number) { if (this.props.rotation !== value) { this.props.rotation = value; - this.updateScaleRotateTransform(); + this.setUpdateType(UpdateType.ScaleRotate); } } @@ -563,14 +699,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set alpha(value: number) { this.props.alpha = value; - this.setRecalculationType(1); - } - - get worldAlpha(): number { - const props = this.props; - const parent = props.parent; - - return props.alpha * (parent?.worldAlpha || 1); + this.setUpdateType(UpdateType.PremultipliedColors); } get clipping(): boolean { @@ -579,8 +708,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set clipping(value: boolean) { this.props.clipping = value; - this.clippingRect = null; - this.setRecalculationType(4); + this.setUpdateType(UpdateType.Clipping); } get color(): number { @@ -601,7 +729,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { } this.props.color = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } get colorTop(): number { @@ -614,7 +742,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { this.colorTr = value; } this.props.colorTop = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } get colorBottom(): number { @@ -627,7 +755,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { this.colorBr = value; } this.props.colorBottom = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } get colorLeft(): number { @@ -640,7 +768,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { this.colorBl = value; } this.props.colorLeft = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } get colorRight(): number { @@ -653,7 +781,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { this.colorBr = value; } this.props.colorRight = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } get colorTl(): number { @@ -662,7 +790,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set colorTl(value: number) { this.props.colorTl = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } get colorTr(): number { @@ -671,7 +799,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set colorTr(value: number) { this.props.colorTr = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } get colorBl(): number { @@ -680,7 +808,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set colorBl(value: number) { this.props.colorBl = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } get colorBr(): number { @@ -689,7 +817,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set colorBr(value: number) { this.props.colorBr = value; - this.setRecalculationType(2); + this.setUpdateType(UpdateType.PremultipliedColors); } // we're only interested in parent zIndex to test @@ -700,22 +828,16 @@ export class CoreNode extends EventEmitter implements ICoreNode { set zIndexLocked(value: number) { this.props.zIndexLocked = value; + this.setUpdateType(UpdateType.CalculatedZIndex); } get zIndex(): number { - const props = this.props; - const z = props.zIndex || 0; - const p = props.parent?.zIndex || 0; - - if (props.parent?.zIndexLocked) { - return z < p ? z : p; - } - return z; + return this.props.zIndex; } set zIndex(value: number) { this.props.zIndex = value; - this.props.parent?.setRecalculationType(8); + this.setUpdateType(UpdateType.CalculatedZIndex); } get parent(): CoreNode | null { @@ -738,8 +860,8 @@ export class CoreNode extends EventEmitter implements ICoreNode { } if (newParent) { newParent.children.push(this); - // force parent to recalculate z-index for its children - newParent.setRecalculationType(8); + // force parent to re-sort children by z-index + newParent.setUpdateType(UpdateType.ZIndexSortedChildren); } this.updateScaleRotateTransform(); diff --git a/src/core/Stage.ts b/src/core/Stage.ts index 95d2a80d..c2ef0e62 100644 --- a/src/core/Stage.ts +++ b/src/core/Stage.ts @@ -183,7 +183,7 @@ export class Stage extends EventEmitter { return false; } - return scene?.root?.hasUpdates; + return !!scene?.root?.updateType; } /** diff --git a/src/core/renderers/webgl/WebGlCoreRenderer.ts b/src/core/renderers/webgl/WebGlCoreRenderer.ts index 3217f95a..b1fe8c4d 100644 --- a/src/core/renderers/webgl/WebGlCoreRenderer.ts +++ b/src/core/renderers/webgl/WebGlCoreRenderer.ts @@ -325,11 +325,7 @@ export class WebGlCoreRenderer extends CoreRenderer { fQuadBuffer[bufferIdx++] = ty; // vertexY fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY - uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied( - colorTl, - alpha, - true, - ); // color + uiQuadBuffer[bufferIdx++] = colorTl; // color fQuadBuffer[bufferIdx++] = textureIdx; // texIndex // Upper-Right @@ -337,11 +333,7 @@ export class WebGlCoreRenderer extends CoreRenderer { fQuadBuffer[bufferIdx++] = ty + width * tc; fQuadBuffer[bufferIdx++] = texCoordX2; fQuadBuffer[bufferIdx++] = texCoordY1; - uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied( - colorTr, - alpha, - true, - ); + uiQuadBuffer[bufferIdx++] = colorTr; fQuadBuffer[bufferIdx++] = textureIdx; // Lower-Left @@ -349,11 +341,7 @@ export class WebGlCoreRenderer extends CoreRenderer { fQuadBuffer[bufferIdx++] = ty + height * td; fQuadBuffer[bufferIdx++] = texCoordX1; fQuadBuffer[bufferIdx++] = texCoordY2; - uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied( - colorBl, - alpha, - true, - ); + uiQuadBuffer[bufferIdx++] = colorBl; fQuadBuffer[bufferIdx++] = textureIdx; // Lower-Right @@ -361,11 +349,7 @@ export class WebGlCoreRenderer extends CoreRenderer { fQuadBuffer[bufferIdx++] = ty + width * tc + height * td; fQuadBuffer[bufferIdx++] = texCoordX2; fQuadBuffer[bufferIdx++] = texCoordY2; - uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied( - colorBr, - alpha, - true, - ); + uiQuadBuffer[bufferIdx++] = colorBr; fQuadBuffer[bufferIdx++] = textureIdx; } else { // Calculate the right corner of the quad @@ -378,11 +362,7 @@ export class WebGlCoreRenderer extends CoreRenderer { fQuadBuffer[bufferIdx++] = ty; // vertexY fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY - uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied( - colorTl, - alpha, - true, - ); // color + uiQuadBuffer[bufferIdx++] = colorTl; // color fQuadBuffer[bufferIdx++] = textureIdx; // texIndex // Upper-Right @@ -390,11 +370,7 @@ export class WebGlCoreRenderer extends CoreRenderer { fQuadBuffer[bufferIdx++] = ty; fQuadBuffer[bufferIdx++] = texCoordX2; fQuadBuffer[bufferIdx++] = texCoordY1; - uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied( - colorTr, - alpha, - true, - ); + uiQuadBuffer[bufferIdx++] = colorTr; fQuadBuffer[bufferIdx++] = textureIdx; // Lower-Left @@ -402,11 +378,7 @@ export class WebGlCoreRenderer extends CoreRenderer { fQuadBuffer[bufferIdx++] = rightCornerY; fQuadBuffer[bufferIdx++] = texCoordX1; fQuadBuffer[bufferIdx++] = texCoordY2; - uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied( - colorBl, - alpha, - true, - ); + uiQuadBuffer[bufferIdx++] = colorBl; fQuadBuffer[bufferIdx++] = textureIdx; // Lower-Right @@ -414,11 +386,7 @@ export class WebGlCoreRenderer extends CoreRenderer { fQuadBuffer[bufferIdx++] = rightCornerY; fQuadBuffer[bufferIdx++] = texCoordX2; fQuadBuffer[bufferIdx++] = texCoordY2; - uiQuadBuffer[bufferIdx++] = mergeColorAlphaPremultiplied( - colorBr, - alpha, - true, - ); + uiQuadBuffer[bufferIdx++] = colorBr; fQuadBuffer[bufferIdx++] = textureIdx; } diff --git a/src/core/text-rendering/renderers/CanvasTextRenderer.ts b/src/core/text-rendering/renderers/CanvasTextRenderer.ts index 69445a2d..d752b713 100644 --- a/src/core/text-rendering/renderers/CanvasTextRenderer.ts +++ b/src/core/text-rendering/renderers/CanvasTextRenderer.ts @@ -114,7 +114,11 @@ export class CanvasTextRenderer extends TextRenderer { } else { this.canvas = document.createElement('canvas'); } - let context = this.canvas.getContext('2d'); + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + let context = this.canvas.getContext('2d') as + | OffscreenCanvasRenderingContext2D + | CanvasRenderingContext2D + | null; if (!context) { // A browser may appear to support OffscreenCanvas but not actually support the Canvas '2d' context // Here we try getting the context again after falling back to an HTMLCanvasElement. From cb290c9220e600e6115389f9a86dd6b8c4c27107 Mon Sep 17 00:00:00 2001 From: Frank Weindel <6070611+frank-weindel@users.noreply.github.com> Date: Wed, 6 Dec 2023 22:34:24 -0500 Subject: [PATCH 2/5] Rename TypeDoc output dir to `typedocs`. Add new `docs` folder. --- .gitignore | 2 +- README.md | 2 +- docs/NodeDependencyGraph.md | 5 +++++ docs/images/dependency-graph.png | Bin 0 -> 47949 bytes docs/images/dependency-graph.txt | 2 ++ typedoc.config.cjs | 2 +- 6 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 docs/NodeDependencyGraph.md create mode 100644 docs/images/dependency-graph.png create mode 100644 docs/images/dependency-graph.txt diff --git a/.gitignore b/.gitignore index 8bee854e..894abc1a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ node_modules .DS_store .idea -docs +typedocs dist dist-cfg dist-vitest diff --git a/README.md b/README.md index da55a1ac..43e8e543 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ pnpm test # Run Visual Regression Tests pnpm test:visual -# Build API Documentation (builds into ./docs folder) +# Build API Documentation (builds into ./typedocs folder) pnpm typedoc # Launch Example Tests in dev mode (includes Build Renderer (watch mode)) diff --git a/docs/NodeDependencyGraph.md b/docs/NodeDependencyGraph.md new file mode 100644 index 00000000..421d5118 --- /dev/null +++ b/docs/NodeDependencyGraph.md @@ -0,0 +1,5 @@ +# Node Depenedency Graph + +The diagram below describes the reactive flow of inputs into cached calculated data elements that are updated during each `update()` of a Core Node. + +![Dependency graph describing by way of a water fall the input and output relationship of calculated (and cached) data elements of a node](./images/dependency-graph.png) diff --git a/docs/images/dependency-graph.png b/docs/images/dependency-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e72234494cad9142a364f30ef0bbd330d3706d54 GIT binary patch literal 47949 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

rWNGuA?m~0OhTR-60g2Z9ZYLqQSX8u7^K0 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 literal 0 HcmV?d00001 diff --git a/docs/images/dependency-graph.txt b/docs/images/dependency-graph.txt new file mode 100644 index 00000000..e82f8fbf --- /dev/null +++ b/docs/images/dependency-graph.txt @@ -0,0 +1,2 @@ +https://lucid.app/lucidchart/f5c48c94-6096-44c5-bca2-97fe2b581095/edit?viewport_loc=-1167%2C-285%2C4800%2C2244%2Cm8WTkWxK2plY&invitationId=inv_44218a81-5bb9-4436-a5e6-5697c146e164 +https://lucid.app/publicSegments/view/56aa76d3-d7c2-4020-a3bc-8638084cb22b/image.png diff --git a/typedoc.config.cjs b/typedoc.config.cjs index d83a6977..5303c633 100644 --- a/typedoc.config.cjs +++ b/typedoc.config.cjs @@ -6,5 +6,5 @@ module.exports = { './exports/core-api.ts', './exports/utils.ts', ], - out: 'docs', + out: 'typedocs', }; From 9dbbfaa12c2fd3de35ba2f4a380508d81b4b61b6 Mon Sep 17 00:00:00 2001 From: Frank Weindel <6070611+frank-weindel@users.noreply.github.com> Date: Wed, 6 Dec 2023 22:38:27 -0500 Subject: [PATCH 3/5] Add missing updateType flag when alpha is changed --- src/core/CoreNode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/CoreNode.ts b/src/core/CoreNode.ts index 2822c636..d982fe5a 100644 --- a/src/core/CoreNode.ts +++ b/src/core/CoreNode.ts @@ -699,7 +699,7 @@ export class CoreNode extends EventEmitter implements ICoreNode { set alpha(value: number) { this.props.alpha = value; - this.setUpdateType(UpdateType.PremultipliedColors); + this.setUpdateType(UpdateType.PremultipliedColors | UpdateType.WorldAlpha); } get clipping(): boolean { From e064e46d2073e08dbd0b42746f6ad566449a3778 Mon Sep 17 00:00:00 2001 From: Frank Weindel <6070611+frank-weindel@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:06:12 -0500 Subject: [PATCH 4/5] Fix bugs --- src/core/CoreNode.ts | 89 ++++++++++--------- src/core/Stage.ts | 9 +- .../renderers/CanvasTextRenderer.ts | 28 +++--- 3 files changed, 65 insertions(+), 61 deletions(-) diff --git a/src/core/CoreNode.ts b/src/core/CoreNode.ts index d982fe5a..a4d5d8d8 100644 --- a/src/core/CoreNode.ts +++ b/src/core/CoreNode.ts @@ -313,16 +313,16 @@ export class CoreNode extends EventEmitter implements ICoreNode { parent.globalTransform, this.globalTransform, ).multiply(this.localTransform); + this.setUpdateType(UpdateType.Clipping | UpdateType.Children); childUpdateType |= UpdateType.Global; - this.setUpdateType(UpdateType.Clipping); } else { assertTruthy(this.localTransform); this.globalTransform = Matrix3d.copy( this.localTransform, this.globalTransform, ); - childUpdateType |= UpdateType.Global; this.setUpdateType(UpdateType.Clipping | UpdateType.Children); + childUpdateType |= UpdateType.Global; } } @@ -332,47 +332,57 @@ export class CoreNode extends EventEmitter implements ICoreNode { childUpdateType |= UpdateType.Clipping; } + if (this.updateType & UpdateType.WorldAlpha) { + if (parent) { + this.worldAlpha = parent.worldAlpha * this.props.alpha; + } else { + this.worldAlpha = this.props.alpha; + } + this.setUpdateType(UpdateType.Children | UpdateType.PremultipliedColors); + childUpdateType |= UpdateType.WorldAlpha; + } + if (this.updateType & UpdateType.PremultipliedColors) { if (parent) { this.premultipliedColorTl = mergeColorAlphaPremultiplied( this.props.colorTl, - this.props.alpha, + this.worldAlpha, true, ); this.premultipliedColorTr = mergeColorAlphaPremultiplied( this.props.colorTr, - this.props.alpha, + this.worldAlpha, true, ); this.premultipliedColorBl = mergeColorAlphaPremultiplied( this.props.colorBl, - this.props.alpha, + this.worldAlpha, true, ); this.premultipliedColorBr = mergeColorAlphaPremultiplied( this.props.colorBr, - this.props.alpha, + this.worldAlpha, true, ); } else { this.premultipliedColorTl = mergeColorAlphaPremultiplied( this.props.colorTl, - this.props.alpha, + this.worldAlpha, true, ); this.premultipliedColorTr = mergeColorAlphaPremultiplied( this.props.colorTr, - this.props.alpha, + this.worldAlpha, true, ); this.premultipliedColorBl = mergeColorAlphaPremultiplied( this.props.colorBl, - this.props.alpha, + this.worldAlpha, true, ); this.premultipliedColorBr = mergeColorAlphaPremultiplied( this.props.colorBr, - this.props.alpha, + this.worldAlpha, true, ); } @@ -380,38 +390,32 @@ export class CoreNode extends EventEmitter implements ICoreNode { childUpdateType |= UpdateType.PremultipliedColors; } - if (this.updateType & UpdateType.WorldAlpha) { - if (parent) { - this.worldAlpha = parent.worldAlpha * this.props.alpha; - } else { - this.worldAlpha = this.props.alpha; - } - this.setUpdateType(UpdateType.Children); - childUpdateType |= UpdateType.WorldAlpha; - } - - if (this.updateType & UpdateType.CalculatedZIndex) { + // No need to update zIndex if there is no parent + if (parent && this.updateType & UpdateType.CalculatedZIndex) { this.calculateZIndex(); - this.setUpdateType(UpdateType.ZIndexSortedChildren); - } - - if (this.updateType & UpdateType.ZIndexSortedChildren) { - // reorder z-index - this.sortChildren(); + // Tell parent to re-sort children + parent.setUpdateType(UpdateType.ZIndexSortedChildren); } if (this.updateType & UpdateType.Children && this.children.length) { this.children.forEach((child) => { + // Trigger the depenedent update types on the child + child.setUpdateType(childUpdateType); // If child has no updates, skip if (child.updateType === 0) { return; } - // Trigger the depenedent update types on the child - child.setUpdateType(childUpdateType); child.update(delta, this.clippingRect); }); } + // Sorting children MUST happen after children have been updated so + // that they have the oppotunity to update their calculated zIndex. + if (this.updateType & UpdateType.ZIndexSortedChildren) { + // reorder z-index + this.sortChildren(); + } + // reset update type this.updateType = 0; } @@ -477,15 +481,6 @@ export class CoreNode extends EventEmitter implements ICoreNode { premultipliedColorBr, } = this; - if ( - premultipliedColorTl === 0 && - premultipliedColorTr === 0 && - premultipliedColorBl === 0 && - premultipliedColorBr === 0 - ) { - return; - } - const { zIndex, worldAlpha, globalTransform: gt, clippingRect } = this; assertTruthy(gt); @@ -828,7 +823,10 @@ export class CoreNode extends EventEmitter implements ICoreNode { set zIndexLocked(value: number) { this.props.zIndexLocked = value; - this.setUpdateType(UpdateType.CalculatedZIndex); + this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children); + this.children.forEach((child) => { + child.setUpdateType(UpdateType.CalculatedZIndex); + }); } get zIndex(): number { @@ -837,7 +835,10 @@ export class CoreNode extends EventEmitter implements ICoreNode { set zIndex(value: number) { this.props.zIndex = value; - this.setUpdateType(UpdateType.CalculatedZIndex); + this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children); + this.children.forEach((child) => { + child.setUpdateType(UpdateType.CalculatedZIndex); + }); } get parent(): CoreNode | null { @@ -860,8 +861,12 @@ export class CoreNode extends EventEmitter implements ICoreNode { } if (newParent) { newParent.children.push(this); - // force parent to re-sort children by z-index - newParent.setUpdateType(UpdateType.ZIndexSortedChildren); + // Since this node has a new parent, to be safe, have it do a full update. + this.setUpdateType(UpdateType.All); + // Tell parent that it's children need to be updated and sorted. + newParent.setUpdateType( + UpdateType.Children | UpdateType.ZIndexSortedChildren, + ); } this.updateScaleRotateTransform(); diff --git a/src/core/Stage.ts b/src/core/Stage.ts index c2ef0e62..8fae62e5 100644 --- a/src/core/Stage.ts +++ b/src/core/Stage.ts @@ -191,12 +191,11 @@ export class Stage extends EventEmitter { */ drawFrame() { const { renderer, scene } = this; - if (!scene?.root) { - return; - } - // reset and clear viewport - scene?.root?.update(this.deltaTime); + // Update tree if needed + if (scene.root.updateType !== 0) { + scene.root.update(this.deltaTime); + } // test if we need to update the scene renderer?.reset(); diff --git a/src/core/text-rendering/renderers/CanvasTextRenderer.ts b/src/core/text-rendering/renderers/CanvasTextRenderer.ts index d752b713..265b4caa 100644 --- a/src/core/text-rendering/renderers/CanvasTextRenderer.ts +++ b/src/core/text-rendering/renderers/CanvasTextRenderer.ts @@ -18,7 +18,7 @@ */ import { EventEmitter } from '../../../common/EventEmitter.js'; -import { assertTruthy } from '../../../utils.js'; +import { assertTruthy, mergeColorAlphaPremultiplied } from '../../../utils.js'; import type { Stage } from '../../Stage.js'; import type { Matrix3d } from '../../lib/Matrix3d.js'; import { @@ -547,15 +547,15 @@ export class CanvasTextRenderer extends TextRenderer { // Color alpha of text is not properly rendered to the Canvas texture, so we // need to apply it here. const combinedAlpha = alpha * getNormalizedAlphaComponent(color); - + const quadColor = mergeColorAlphaPremultiplied(0xffffffff, combinedAlpha); if (canvasPages[0].valid) { this.stage.renderer.addQuad({ alpha: combinedAlpha, clippingRect, - colorBl: 0xffffffff, - colorBr: 0xffffffff, - colorTl: 0xffffffff, - colorTr: 0xffffffff, + colorBl: quadColor, + colorBr: quadColor, + colorTl: quadColor, + colorTr: quadColor, width: canvasPages[0].texture?.dimensions?.width || 0, height: canvasPages[0].texture?.dimensions?.height || 0, texture: canvasPages[0].texture!, @@ -575,10 +575,10 @@ export class CanvasTextRenderer extends TextRenderer { this.stage.renderer.addQuad({ alpha: combinedAlpha, clippingRect, - colorBl: 0xffffffff, - colorBr: 0xffffffff, - colorTl: 0xffffffff, - colorTr: 0xffffffff, + colorBl: quadColor, + colorBr: quadColor, + colorTl: quadColor, + colorTr: quadColor, width: canvasPages[1].texture?.dimensions?.width || 0, height: canvasPages[1].texture?.dimensions?.height || 0, texture: canvasPages[1].texture!, @@ -598,10 +598,10 @@ export class CanvasTextRenderer extends TextRenderer { this.stage.renderer.addQuad({ alpha: combinedAlpha, clippingRect, - colorBl: 0xffffffff, - colorBr: 0xffffffff, - colorTl: 0xffffffff, - colorTr: 0xffffffff, + colorBl: quadColor, + colorBr: quadColor, + colorTl: quadColor, + colorTr: quadColor, width: canvasPages[2].texture?.dimensions?.width || 0, height: canvasPages[2].texture?.dimensions?.height || 0, texture: canvasPages[2].texture!, From c9e20cb0219b1507e21ef589a76c40150f7adbe3 Mon Sep 17 00:00:00 2001 From: Frank Weindel <6070611+frank-weindel@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:18:49 -0500 Subject: [PATCH 5/5] Update dependency graph --- docs/images/dependency-graph.png | Bin 47949 -> 52923 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/dependency-graph.png b/docs/images/dependency-graph.png index e72234494cad9142a364f30ef0bbd330d3706d54..99dd62cb4db3dd72f180513eed147ff70004cb06 100644 GIT binary patch literal 52923 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 O`wFtE_ljT-{r?BEG7e<` literal 47949 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

rWNGuA?m~0OhTR-60g2Z9ZYLqQSX8u7^K0 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