From ff0b7d46608885c43c49f3f49e95110e77aaf5dd Mon Sep 17 00:00:00 2001 From: wouterlucas Date: Sat, 16 Aug 2025 15:57:01 +0200 Subject: [PATCH] refactor: remove strictBounds property --- examples/tests/viewport-strictbounds.ts | 93 ------------------ src/core/CoreNode.test.ts | 1 - src/core/CoreNode.ts | 35 +------ src/core/Stage.ts | 7 +- src/core/renderers/webgl/WebGlRenderer.ts | 3 +- src/main-api/Renderer.ts | 13 --- .../chromium-ci/viewport-strictbounds-1.png | Bin 11952 -> 0 bytes .../chromium-ci/viewport-strictbounds-2.png | Bin 11099 -> 0 bytes .../chromium-ci/viewport-strictbounds-3.png | Bin 8044 -> 0 bytes 9 files changed, 3 insertions(+), 149 deletions(-) delete mode 100644 examples/tests/viewport-strictbounds.ts delete mode 100644 visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-1.png delete mode 100644 visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-2.png delete mode 100644 visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-3.png diff --git a/examples/tests/viewport-strictbounds.ts b/examples/tests/viewport-strictbounds.ts deleted file mode 100644 index f124dd83..00000000 --- a/examples/tests/viewport-strictbounds.ts +++ /dev/null @@ -1,93 +0,0 @@ -import type { ExampleSettings } from '../common/ExampleSettings.js'; - -export async function automation(settings: ExampleSettings) { - const page = await test(settings); - page(1); - await settings.snapshot(); - - page(2); - await settings.snapshot(); - - page(3); - await settings.snapshot(); -} - -export default async function test({ renderer, testRoot }: ExampleSettings) { - // Create a container node - const containerNode = renderer.createNode({ - x: 10, - y: 100, - w: 1000, - h: 600, - color: 0xff0000ff, // Red - parent: testRoot, - strictBounds: false, - }); - - const status = renderer.createTextNode({ - text: 'Strict Bound: ', - fontSize: 30, - x: 10, - y: 50, - parent: testRoot, - }); - - const amountOfNodes = 11; - const childNodeWidth = 1700 / amountOfNodes; - - // Create 11 child nodes - for (let i = 0; i < amountOfNodes; i++) { - const childNode = renderer.createNode({ - x: i * childNodeWidth + i * 100, - y: 100, - w: childNodeWidth, - h: 300, - color: 0x00ff00ff, // Green - parent: containerNode, - }); - - const nodeTest = renderer.createTextNode({ - x: 10, - y: 130, - text: `Node ${i}`, - color: 0x000000ff, - parent: childNode, - }); - } - - renderer.on('idle', () => { - status.text = 'Strict Bound: ' + String(containerNode.strictBounds); - }); - - window.onkeydown = (e) => { - if (e.key === 'ArrowRight') { - containerNode.x -= 100; - } - - if (e.key === 'ArrowLeft') { - containerNode.x += 100; - } - - if (e.key === ' ') { - containerNode.strictBounds = !containerNode.strictBounds; - } - }; - - const page = (i = 0) => { - switch (i) { - case 1: - containerNode.x = -590; - break; - - case 2: - containerNode.x = -1390; - break; - - case 3: - containerNode.strictBounds = true; - break; - } - }; - - return page; -} diff --git a/src/core/CoreNode.test.ts b/src/core/CoreNode.test.ts index 5d3f9206..902966f8 100644 --- a/src/core/CoreNode.test.ts +++ b/src/core/CoreNode.test.ts @@ -62,7 +62,6 @@ describe('set color()', () => { y: 0, zIndex: 0, zIndexLocked: 0, - strictBounds: false, }; const clippingRect = { diff --git a/src/core/CoreNode.ts b/src/core/CoreNode.ts index ca5eba9b..220d3edd 100644 --- a/src/core/CoreNode.ts +++ b/src/core/CoreNode.ts @@ -672,21 +672,6 @@ export interface CoreNodeProps { * @default false */ interactive?: boolean; - /** - * By enabling Strict bounds the renderer will not process & render child nodes of a node that is out of the visible area - * - * @remarks - * When enabled out of bound nodes, i.e. nodes that are out of the visible area, will - * **NOT** have their children processed and renderer anymore. This means the children of a out of bound - * node will not receive update processing such as positioning updates and will not be drawn on screen. - * As such the rest of the branch of the update tree that sits below this node will not be processed anymore - * - * This is a big performance gain but may be disabled in cases where the width of the parent node is - * unknown and the render must process the child nodes regardless of the viewport status of the parent node - * - * @default true - */ - strictBounds: boolean; } /** @@ -796,7 +781,6 @@ export class CoreNode extends EventEmitter { p.mountY = props.mountY; p.mount = props.mount; p.pivot = props.pivot; - p.strictBounds = props.strictBounds; p.zIndex = props.zIndex; p.zIndexLocked = props.zIndexLocked; @@ -1219,10 +1203,7 @@ export class CoreNode extends EventEmitter { parent.setUpdateType(UpdateType.ZIndexSortedChildren); } - if ( - props.strictBounds === true && - this.renderState === CoreNodeRenderState.OutOfBounds - ) { + if (this.renderState === CoreNodeRenderState.OutOfBounds) { updateType &= ~UpdateType.RenderBounds; // remove render bounds update return; } @@ -2451,20 +2432,6 @@ export class CoreNode extends EventEmitter { this.parent?.setRTTUpdates(type); } - get strictBounds(): boolean { - return this.props.strictBounds; - } - - set strictBounds(v) { - if (v === this.props.strictBounds) { - return; - } - - this.props.strictBounds = v; - this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children); - this.childUpdateType |= UpdateType.RenderBounds | UpdateType.Children; - } - animate( props: Partial, settings: Partial, diff --git a/src/core/Stage.ts b/src/core/Stage.ts index 0ceda96e..22916c90 100644 --- a/src/core/Stage.ts +++ b/src/core/Stage.ts @@ -102,7 +102,6 @@ export class Stage { public readonly defShaderNode: CoreShaderNode | null = null; public strictBound: Bound; public preloadBound: Bound; - public readonly strictBounds: boolean; public readonly defaultTexture: Texture | null = null; public pixelRatio: number; public readonly bufferMemory: number = 2e6; @@ -197,7 +196,6 @@ export class Stage { this.animationManager = new AnimationManager(); this.contextSpy = enableContextSpy ? new ContextSpy() : null; - this.strictBounds = options.strictBounds; let bm = [0, 0, 0, 0] as [number, number, number, number]; if (boundsMargin) { @@ -354,7 +352,6 @@ export class Stage { rtt: false, src: null, scale: 1, - strictBounds: this.strictBounds, }); this.root = rootNode; @@ -589,8 +586,7 @@ export class Stage { if ( child.worldAlpha === 0 || - (child.strictBounds === true && - child.renderState === CoreNodeRenderState.OutOfBounds) + child.renderState === CoreNodeRenderState.OutOfBounds ) { continue; } @@ -847,7 +843,6 @@ export class Stage { data, imageType: props.imageType, interactive: props.interactive ?? false, - strictBounds: props.strictBounds ?? this.strictBounds, }; } diff --git a/src/core/renderers/webgl/WebGlRenderer.ts b/src/core/renderers/webgl/WebGlRenderer.ts index 204b9092..729e783a 100644 --- a/src/core/renderers/webgl/WebGlRenderer.ts +++ b/src/core/renderers/webgl/WebGlRenderer.ts @@ -554,8 +554,7 @@ export class WebGlRenderer extends CoreRenderer { // Skip nodes that are not visible if ( node.worldAlpha === 0 || - (node.strictBounds === true && - node.renderState === CoreNodeRenderState.OutOfBounds) + node.renderState === CoreNodeRenderState.OutOfBounds ) { continue; } diff --git a/src/main-api/Renderer.ts b/src/main-api/Renderer.ts index 6cfa3172..b81d1f30 100644 --- a/src/main-api/Renderer.ts +++ b/src/main-api/Renderer.ts @@ -250,17 +250,6 @@ export type RendererMainSettings = RendererRuntimeSettings & { */ forceWebGL2: boolean; - /** - * Enable strictBounds - * - * @remarks - * Enable strict bounds for the renderer. This will ensure that the renderer - * will not render outside the bounds of the canvas. - * - * @defaultValue `true` - */ - strictBounds: boolean; - /** * Canvas object to use for rendering * @@ -400,7 +389,6 @@ export class RendererMain extends EventEmitter { renderEngine: settings.renderEngine, quadBufferSize: settings.quadBufferSize ?? 4 * 1024 * 1024, fontEngines: settings.fontEngines ?? [], - strictBounds: settings.strictBounds ?? true, textureProcessingTimeLimit: settings.textureProcessingTimeLimit || 42, canvas: settings.canvas || document.createElement('canvas'), createImageBitmapSupport: settings.createImageBitmapSupport || 'full', @@ -457,7 +445,6 @@ export class RendererMain extends EventEmitter { quadBufferSize: settings.quadBufferSize!, fontEngines: settings.fontEngines!, inspector: settings.inspector !== null, - strictBounds: settings.strictBounds!, targetFPS: settings.targetFPS!, textureProcessingTimeLimit: settings.textureProcessingTimeLimit!, createImageBitmapSupport: settings.createImageBitmapSupport!, diff --git a/visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-1.png b/visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-1.png deleted file mode 100644 index 4a9d54d1ddb696f9dc9ff0a89f3e95e793cb2245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11952 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 YBK9ZSZE5=iADxRm?fygc_ve58FD=NJ*Z=?k diff --git a/visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-2.png b/visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-2.png deleted file mode 100644 index 604bd0f0961b82c71a2abb15fea930b09b3ef4de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11099 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 diff --git a/visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-3.png b/visual-regression/certified-snapshots/chromium-ci/viewport-strictbounds-3.png deleted file mode 100644 index 92518fffa8a474f88de17596c107d0f828e90e97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8044 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