From 91f810daf9964d8ee50ebb5643cf2a79614bcc61 Mon Sep 17 00:00:00 2001 From: Chris Lorenzo Date: Wed, 21 Jan 2026 11:26:59 -0500 Subject: [PATCH 1/2] cache key value for shader nodes --- src/core/renderers/CoreShaderNode.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/core/renderers/CoreShaderNode.ts b/src/core/renderers/CoreShaderNode.ts index 08baf52e..686bb33e 100644 --- a/src/core/renderers/CoreShaderNode.ts +++ b/src/core/renderers/CoreShaderNode.ts @@ -96,6 +96,10 @@ export class CoreShaderNode> { protected node: CoreNode | null = null; readonly time: CoreShaderType['time'] = undefined; update: (() => void) | undefined = undefined; + protected _valueKeyCache = ''; + protected _valueKeyDirty = true; + protected _lastW = 0; + protected _lastH = 0; constructor( readonly shaderKey: string, @@ -141,6 +145,7 @@ export class CoreShaderNode> { } else { this.resolvedProps![key] = value; } + this._valueKeyDirty = true; if (this.update !== undefined && this.node !== null) { this.node.setUpdateType(UpdateType.RecalcUniforms); @@ -158,12 +163,27 @@ export class CoreShaderNode> { } createValueKey() { + if ( + this._valueKeyDirty === false && + this.node !== null && + this.node.w === this._lastW && + this.node.h === this._lastH + ) { + return this._valueKeyCache; + } + let valueKey = ''; for (const key in this.resolvedProps) { valueKey += `${key}:${this.resolvedProps[key]!};`; } valueKey += `node-width:${this.node!.w}`; valueKey += `node-height:${this.node!.h}`; + + this._valueKeyCache = valueKey; + this._valueKeyDirty = false; + this._lastW = this.node!.w; + this._lastH = this.node!.h; + return valueKey; } From 477ed29d58bb1b59538d0e62ffd8de859998b207 Mon Sep 17 00:00:00 2001 From: Chris Lorenzo Date: Thu, 22 Jan 2026 07:58:21 -0500 Subject: [PATCH 2/2] change to private --- src/core/renderers/CoreShaderNode.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/renderers/CoreShaderNode.ts b/src/core/renderers/CoreShaderNode.ts index 686bb33e..991453e4 100644 --- a/src/core/renderers/CoreShaderNode.ts +++ b/src/core/renderers/CoreShaderNode.ts @@ -96,10 +96,10 @@ export class CoreShaderNode> { protected node: CoreNode | null = null; readonly time: CoreShaderType['time'] = undefined; update: (() => void) | undefined = undefined; - protected _valueKeyCache = ''; - protected _valueKeyDirty = true; - protected _lastW = 0; - protected _lastH = 0; + private _valueKeyCache = ''; + private _valueKeyDirty = true; + private _lastW = 0; + private _lastH = 0; constructor( readonly shaderKey: string,