فهرست منبع

TextureNode: Use `context.tempWrite=false` for conditionals (#26574)

sunag 1 سال پیش
والد
کامیت
3866c3c7bd
2فایلهای تغییر یافته به همراه24 افزوده شده و 5 حذف شده
  1. 18 3
      examples/jsm/nodes/accessors/CubeTextureNode.js
  2. 6 2
      examples/jsm/nodes/accessors/TextureNode.js

+ 18 - 3
examples/jsm/nodes/accessors/CubeTextureNode.js

@@ -2,6 +2,8 @@ import TextureNode from './TextureNode.js';
 import UniformNode from '../core/UniformNode.js';
 import { reflectVector } from './ReflectVectorNode.js';
 import { addNodeClass } from '../core/Node.js';
+import { colorSpaceToLinear } from '../display/ColorSpaceNode.js';
+import { expression } from '../code/ExpressionNode.js';
 import { addNodeElement, nodeProxy, vec3 } from '../shadernode/ShaderNode.js';
 
 class CubeTextureNode extends TextureNode {
@@ -52,6 +54,7 @@ class CubeTextureNode extends TextureNode {
 
 		} else {
 
+			const nodeType = this.getNodeType( builder );
 			const nodeData = builder.getDataFromNode( this );
 
 			let propertyName = nodeData.propertyName;
@@ -81,12 +84,24 @@ class CubeTextureNode extends TextureNode {
 
 				builder.addLineFlowCode( `${propertyName} = ${snippet}` );
 
-				nodeData.snippet = snippet;
-				nodeData.propertyName = propertyName;
+				if ( builder.context.tempWrite !== false ) {
+
+					nodeData.snippet = snippet;
+					nodeData.propertyName = propertyName;
+
+				}
+
+			}
+
+			let snippet = propertyName;
+
+			if ( builder.needsColorSpaceToLinear( this.value ) ) {
+
+				snippet = colorSpaceToLinear( expression( snippet, nodeType ), this.value.colorSpace ).construct( builder ).build( builder, nodeType );
 
 			}
 
-			return builder.format( propertyName, 'vec4', output );
+			return builder.format( snippet, 'vec4', output );
 
 		}
 

+ 6 - 2
examples/jsm/nodes/accessors/TextureNode.js

@@ -168,8 +168,12 @@ class TextureNode extends UniformNode {
 
 				builder.addLineFlowCode( `${propertyName} = ${snippet}` );
 
-				nodeData.snippet = snippet;
-				nodeData.propertyName = propertyName;
+				if ( builder.context.tempWrite !== false ) {
+
+					nodeData.snippet = snippet;
+					nodeData.propertyName = propertyName;
+
+				}
 
 			}