Browse Source

Nodes: Fix PMREM cache. (#32941)

Michael Herzog 3 weeks ago
parent
commit
ef1a43855d
1 changed files with 28 additions and 3 deletions
  1. 28 3
      src/nodes/lighting/EnvironmentNode.js

+ 28 - 3
src/nodes/lighting/EnvironmentNode.js

@@ -9,7 +9,7 @@ import { bentNormalView } from '../accessors/AccessorsUtils.js';
 import { pmremTexture } from '../pmrem/PMREMNode.js';
 import { pmremTexture } from '../pmrem/PMREMNode.js';
 import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
 import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
 
 
-const _envNodeCache = new WeakMap();
+const _rendererCache = new WeakMap();
 
 
 /**
 /**
  * Represents a physical model for Image-based lighting (IBL). The environment
  * Represents a physical model for Image-based lighting (IBL). The environment
@@ -55,13 +55,15 @@ class EnvironmentNode extends LightingNode {
 
 
 			const value = ( envNode.isTextureNode ) ? envNode.value : material[ envNode.property ];
 			const value = ( envNode.isTextureNode ) ? envNode.value : material[ envNode.property ];
 
 
-			let cacheEnvNode = _envNodeCache.get( value );
+			const cache = this._getPMREMNodeCache( builder.renderer );
+
+			let cacheEnvNode = cache.get( value );
 
 
 			if ( cacheEnvNode === undefined ) {
 			if ( cacheEnvNode === undefined ) {
 
 
 				cacheEnvNode = pmremTexture( value );
 				cacheEnvNode = pmremTexture( value );
 
 
-				_envNodeCache.set( value, cacheEnvNode );
+				cache.set( value, cacheEnvNode );
 
 
 			}
 			}
 
 
@@ -101,6 +103,29 @@ class EnvironmentNode extends LightingNode {
 
 
 	}
 	}
 
 
+	/**
+	 * Returns the PMREM node cache of the current renderer.
+	 *
+	 * @private
+	 * @param {Renderer} renderer - The current renderer.
+	 * @return {WeakMap} The node cache.
+	 */
+	_getPMREMNodeCache( renderer ) {
+
+		let pmremCache = _rendererCache.get( renderer );
+
+		if ( pmremCache === undefined ) {
+
+			pmremCache = new WeakMap();
+
+			_rendererCache.set( renderer, pmremCache );
+
+		}
+
+		return pmremCache;
+
+	}
+
 }
 }
 
 
 export default EnvironmentNode;
 export default EnvironmentNode;

粤ICP备19079148号