ソースを参照

Nodes: `VaryingNode` support for `setup()` (#28407)

sunag 1 年間 前
コミット
f127bdd311
1 ファイル変更33 行追加9 行削除
  1. 33 9
      examples/jsm/nodes/core/VaryingNode.js

+ 33 - 9
examples/jsm/nodes/core/VaryingNode.js

@@ -35,22 +35,46 @@ class VaryingNode extends Node {
 
 	}
 
-	generate( builder ) {
+	setupVarying( builder ) {
 
-		const { name, node } = this;
-		const type = this.getNodeType( builder );
+		const properties = builder.getNodeProperties( this );
+
+		let varying = properties.varying;
+
+		if ( varying === undefined ) {
+
+			const name = this.name;
+			const type = this.getNodeType( builder );
 
-		const nodeVarying = builder.getVaryingFromNode( this, name, type );
+			properties.varying = varying = builder.getVaryingFromNode( this, name, type );
+			properties.node = this.node;
 
-		// this property can be used to check if the varying can be optimized for a var
-		nodeVarying.needsInterpolation || ( nodeVarying.needsInterpolation = ( builder.shaderStage === 'fragment' ) );
+		}
+
+		// this property can be used to check if the varying can be optimized for a variable
+		varying.needsInterpolation || ( varying.needsInterpolation = ( builder.shaderStage === 'fragment' ) );
+
+		return varying;
+
+	}
+
+	setup( builder ) {
+
+		this.setupVarying( builder );
+
+	}
+
+	generate( builder ) {
+
+		const type = this.getNodeType( builder );
+		const varying = this.setupVarying( builder );
 
-		const propertyName = builder.getPropertyName( nodeVarying, NodeShaderStage.VERTEX );
+		const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
 
 		// force node run in vertex stage
-		builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, node, type, propertyName );
+		builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node, type, propertyName );
 
-		return builder.getPropertyName( nodeVarying );
+		return builder.getPropertyName( varying );
 
 	}