From 0eda1956e7739c969ead24ee4d0783b4294c17b9 Mon Sep 17 00:00:00 2001 From: sunag Date: Mon, 15 Dec 2025 10:16:22 -0300 Subject: [PATCH 1/2] Lighting: Refactor camera usage (#32557) --- src/renderers/common/Lighting.js | 26 +++++--------------------- src/renderers/common/RenderObject.js | 2 +- src/renderers/common/RenderObjects.js | 20 ++++++++++++++++++-- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/renderers/common/Lighting.js b/src/renderers/common/Lighting.js index 1d332ee7eedc0c..b9685bd02ee504 100644 --- a/src/renderers/common/Lighting.js +++ b/src/renderers/common/Lighting.js @@ -1,8 +1,7 @@ import { LightsNode } from '../../nodes/Nodes.js'; -import ChainMap from './ChainMap.js'; const _defaultLights = /*@__PURE__*/ new LightsNode(); -const _chainKeys = []; +const _weakMap = /*@__PURE__*/ new WeakMap(); /** * This renderer module manages the lights nodes which are unique @@ -12,18 +11,8 @@ const _chainKeys = []; * with the actual lights from the scene. * * @private - * @augments ChainMap */ -class Lighting extends ChainMap { - - /** - * Constructs a lighting management component. - */ - constructor() { - - super(); - - } +class Lighting { /** * Creates a new lights node for the given array of lights. @@ -44,26 +33,21 @@ class Lighting extends ChainMap { * @param {Camera} camera - The camera. * @return {LightsNode} The lights node. */ - getNode( scene, camera ) { + getNode( scene ) { // ignore post-processing if ( scene.isQuadMesh ) return _defaultLights; - _chainKeys[ 0 ] = scene; - _chainKeys[ 1 ] = camera; - - let node = this.get( _chainKeys ); + let node = _weakMap.get( scene ); if ( node === undefined ) { node = this.createNode(); - this.set( _chainKeys, node ); + _weakMap.set( scene, node ); } - _chainKeys.length = 0; - return node; } diff --git a/src/renderers/common/RenderObject.js b/src/renderers/common/RenderObject.js index 702373ee77564e..ab457f6db3ab20 100644 --- a/src/renderers/common/RenderObject.js +++ b/src/renderers/common/RenderObject.js @@ -882,7 +882,7 @@ class RenderObject { } - cacheKey = hash( cacheKey, this.camera.id, this.renderer.contextNode.id, this.renderer.contextNode.version ); + cacheKey = hash( cacheKey, this.renderer.contextNode.id, this.renderer.contextNode.version ); return cacheKey; diff --git a/src/renderers/common/RenderObjects.js b/src/renderers/common/RenderObjects.js index 0495aa7d50effa..fc742b42a2f967 100644 --- a/src/renderers/common/RenderObjects.js +++ b/src/renderers/common/RenderObjects.js @@ -91,12 +91,15 @@ class RenderObjects { const chainMap = this.getChainMap( passId ); - // reuse chainArray + // set chain keys + _chainKeys[ 0 ] = object; _chainKeys[ 1 ] = material; _chainKeys[ 2 ] = renderContext; _chainKeys[ 3 ] = lightsNode; + // + let renderObject = chainMap.get( _chainKeys ); if ( renderObject === undefined ) { @@ -107,6 +110,12 @@ class RenderObjects { } else { + // update references + + renderObject.camera = camera; + + // + renderObject.updateClipping( clippingContext ); if ( renderObject.needsGeometryUpdate ) { @@ -133,7 +142,14 @@ class RenderObjects { } - _chainKeys.length = 0; + // reset chain array + + _chainKeys[ 0 ] = null; + _chainKeys[ 1 ] = null; + _chainKeys[ 2 ] = null; + _chainKeys[ 3 ] = null; + + // return renderObject; From 81f1bca2a658d4ae928388ebd85238331afd02e7 Mon Sep 17 00:00:00 2001 From: sunag Date: Mon, 15 Dec 2025 10:16:48 -0300 Subject: [PATCH 2/2] UniformGroups: Partially updates (#32558) --- src/renderers/common/UniformsGroup.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/renderers/common/UniformsGroup.js b/src/renderers/common/UniformsGroup.js index 029947c8cbc214..84628d35bd26c6 100644 --- a/src/renderers/common/UniformsGroup.js +++ b/src/renderers/common/UniformsGroup.js @@ -235,6 +235,8 @@ class UniformsGroup extends UniformBuffer { b[ offset ] = a[ offset ] = v; updated = true; + this.addUpdateRange( offset, 1 ); + } return updated; @@ -265,6 +267,8 @@ class UniformsGroup extends UniformBuffer { updated = true; + this.addUpdateRange( offset, 2 ); + } return updated; @@ -296,6 +300,8 @@ class UniformsGroup extends UniformBuffer { updated = true; + this.addUpdateRange( offset, 3 ); + } return updated; @@ -328,6 +334,8 @@ class UniformsGroup extends UniformBuffer { updated = true; + this.addUpdateRange( offset, 4 ); + } return updated; @@ -358,6 +366,8 @@ class UniformsGroup extends UniformBuffer { updated = true; + this.addUpdateRange( offset, 3 ); + } return updated; @@ -396,6 +406,8 @@ class UniformsGroup extends UniformBuffer { updated = true; + this.addUpdateRange( offset, 12 ); + } return updated; @@ -423,6 +435,8 @@ class UniformsGroup extends UniformBuffer { setArray( a, e, offset ); updated = true; + this.addUpdateRange( offset, 16 ); + } return updated;