Parcourir la source

TSL: Introduce `boolean` for `uniform()` (#31507)

* introduce `boolean` for `uniform()`

* fix type
sunag il y a 5 mois
Parent
commit
a1d8dde966
1 fichiers modifiés avec 45 ajouts et 2 suppressions
  1. 45 2
      src/nodes/core/UniformNode.js

+ 45 - 2
src/nodes/core/UniformNode.js

@@ -140,6 +140,20 @@ class UniformNode extends InputNode {
 
 
 	}
 	}
 
 
+	getInputType( builder ) {
+
+		let type = super.getInputType( builder );
+
+		if ( type === 'bool' ) {
+
+			type = 'uint';
+
+		}
+
+		return type;
+
+	}
+
 	generate( builder, output ) {
 	generate( builder, output ) {
 
 
 		const type = this.getNodeType( builder );
 		const type = this.getNodeType( builder );
@@ -159,11 +173,40 @@ class UniformNode extends InputNode {
 		const sharedNodeType = sharedNode.getInputType( builder );
 		const sharedNodeType = sharedNode.getInputType( builder );
 
 
 		const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.label );
 		const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, this.name || builder.context.label );
-		const propertyName = builder.getPropertyName( nodeUniform );
+		const uniformName = builder.getPropertyName( nodeUniform );
 
 
 		if ( builder.context.label !== undefined ) delete builder.context.label;
 		if ( builder.context.label !== undefined ) delete builder.context.label;
 
 
-		return builder.format( propertyName, type, output );
+		//
+
+		let snippet = uniformName;
+
+		if ( type === 'bool' ) {
+
+			// cache to variable
+
+			const nodeData = builder.getDataFromNode( this );
+
+			let propertyName = nodeData.propertyName;
+
+			if ( propertyName === undefined ) {
+
+				const nodeVar = builder.getVarFromNode( this, null, 'bool' );
+				propertyName = builder.getPropertyName( nodeVar );
+
+				nodeData.propertyName = propertyName;
+
+				snippet = builder.format( uniformName, sharedNodeType, type );
+
+				builder.addLineFlowCode( `${ propertyName } = ${ snippet }`, this );
+
+			}
+
+			snippet = propertyName;
+
+		}
+
+		return builder.format( snippet, type, output );
 
 
 	}
 	}
 
 

粤ICP备19079148号