Просмотр исходного кода

StructTypeNode: Fix inclusion when added to the layout. (#30439)

sunag 1 год назад
Родитель
Сommit
d6446efba9
3 измененных файлов с 24 добавлено и 6 удалено
  1. 17 1
      src/nodes/core/NodeBuilder.js
  2. 6 0
      src/nodes/core/StructTypeNode.js
  3. 1 5
      src/nodes/tsl/TSLCore.js

+ 17 - 1
src/nodes/core/NodeBuilder.js

@@ -1636,7 +1636,7 @@ class NodeBuilder {
 	 */
 	 */
 	getStructTypeFromNode( node, membersLayout, name = null, shaderStage = this.shaderStage ) {
 	getStructTypeFromNode( node, membersLayout, name = null, shaderStage = this.shaderStage ) {
 
 
-		const nodeData = this.getDataFromNode( node, shaderStage );
+		const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
 
 
 		let structType = nodeData.structType;
 		let structType = nodeData.structType;
 
 
@@ -2047,6 +2047,22 @@ class NodeBuilder {
 
 
 	}
 	}
 
 
+	/**
+	 * Includes a node in the current function node.
+	 *
+	 * @param {Node} node - The node to include.
+	 * @returns {void}
+	 */
+	addInclude( node ) {
+
+		if ( this.currentFunctionNode !== null ) {
+
+			this.currentFunctionNode.includes.push( node );
+
+		}
+
+	}
+
 	/**
 	/**
 	 * Returns the native shader operator name for a given generic name.
 	 * Returns the native shader operator name for a given generic name.
 	 * It is a similar type of method like {@link NodeBuilder#getMethod}.
 	 * It is a similar type of method like {@link NodeBuilder#getMethod}.

+ 6 - 0
src/nodes/core/StructTypeNode.js

@@ -116,6 +116,12 @@ class StructTypeNode extends Node {
 
 
 	}
 	}
 
 
+	setup( builder ) {
+
+		builder.addInclude( this );
+
+	}
+
 	generate( builder ) {
 	generate( builder ) {
 
 
 		return this.getNodeType( builder );
 		return this.getNodeType( builder );

+ 1 - 5
src/nodes/tsl/TSLCore.js

@@ -307,11 +307,7 @@ class ShaderCallNodeInternal extends Node {
 
 
 			}
 			}
 
 
-			if ( builder.currentFunctionNode !== null ) {
-
-				builder.currentFunctionNode.includes.push( functionNode );
-
-			}
+			builder.addInclude( functionNode );
 
 
 			result = nodeObject( functionNode.call( inputNodes ) );
 			result = nodeObject( functionNode.call( inputNodes ) );
 
 

粤ICP备19079148号