diff --git a/package-lock.json b/package-lock.json index bddbdb4f74ca20..1f17c91f7682c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "globals": "^17.0.0", "jpeg-js": "^0.4.4", "jsdoc": "^4.0.5", - "magic-string": "^0.30.0", + "magic-string": "^1.0.0", "pngjs": "^7.0.0", "puppeteer": "^25.0.0", "rollup": "^4.6.0", @@ -2248,9 +2248,9 @@ "license": "MIT" }, "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.0.0.tgz", + "integrity": "sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 994153d9143920..35092bafefdaa8 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "globals": "^17.0.0", "jpeg-js": "^0.4.4", "jsdoc": "^4.0.5", - "magic-string": "^0.30.0", + "magic-string": "^1.0.0", "pngjs": "^7.0.0", "puppeteer": "^25.0.0", "rollup": "^4.6.0", diff --git a/src/materials/nodes/manager/NodeMaterialObserver.js b/src/materials/nodes/manager/NodeMaterialObserver.js index a4f4c98e813c5e..c64cd090139690 100644 --- a/src/materials/nodes/manager/NodeMaterialObserver.js +++ b/src/materials/nodes/manager/NodeMaterialObserver.js @@ -730,11 +730,18 @@ class NodeMaterialObserver { const { renderId } = nodeFrame; + let force = false; + + // shared UBOs are potentially never updated when objects don't change. Below block + // make sure these UBOs are updated at least once. + if ( this.renderId !== renderId ) { this.renderId = renderId; - return true; + // no early out here. instead, force the render object to use the equals() code path so its internal cache state gets synched + + force = true; } @@ -742,12 +749,12 @@ class NodeMaterialObserver { const isBundle = renderObject.bundle !== null && renderObject.bundle.static === true && this.getRenderObjectData( renderObject ).version === renderObject.bundle.version; if ( isStatic || isBundle ) - return false; + return force; const lightsData = this.getLights( renderObject.lightsNode, renderId ); const notEqual = this.equals( renderObject, lightsData, renderId ) !== true; - return notEqual; + return ( force || notEqual ); }