浏览代码

EnvironmentNode: Cache Equirectangular Textures (#26491)

sunag 2 年之前
父节点
当前提交
4a75811d5f
共有 1 个文件被更改,包括 17 次插入5 次删除
  1. 17 5
      examples/jsm/nodes/lighting/EnvironmentNode.js

+ 17 - 5
examples/jsm/nodes/lighting/EnvironmentNode.js

@@ -12,6 +12,8 @@ import { float, vec2 } from '../shadernode/ShaderNode.js';
 import { cubeTexture } from '../accessors/CubeTextureNode.js';
 import { reference } from '../accessors/ReferenceNode.js';
 
+const envNodeCache = new WeakMap();
+
 class EnvironmentNode extends LightingNode {
 
 	constructor( envNode = null ) {
@@ -29,13 +31,23 @@ class EnvironmentNode extends LightingNode {
 
 		if ( envNode.isTextureNode && envNode.value.isCubeTexture !== true ) {
 
-			const texture = envNode.value;
-			const renderer = builder.renderer;
+			let cacheEnvNode = envNodeCache.get( envNode.value );
+
+			if ( cacheEnvNode === undefined ) {
+
+				const texture = envNode.value;
+				const renderer = builder.renderer;
+
+				// @TODO: Add dispose logic here
+				const cubeRTT = builder.getCubeRenderTarget( 512 ).fromEquirectangularTexture( renderer, texture );
 
-			// @TODO: Add dispose logic here
-			const cubeRTT = builder.getCubeRenderTarget( 512 ).fromEquirectangularTexture( renderer, texture );
+				cacheEnvNode = cubeTexture( cubeRTT.texture );
+
+				envNodeCache.set( envNode.value, cacheEnvNode );
+
+			}
 
-			envNode = cubeTexture( cubeRTT.texture );
+			envNode	= cacheEnvNode;
 
 		}