浏览代码

fix VaryNode build in vertex shader

sunag 4 年之前
父节点
当前提交
ad7d8036ce

+ 2 - 2
examples/jsm/renderers/nodes/core/NodeVary.js

@@ -1,10 +1,10 @@
 class NodeVary {
 
-	constructor( name, type, value ) {
+	constructor( name, type, snippet = '' ) {
 
 		this.name = name;
 		this.type = type;
-		this.value = value;
+		this.snippet = snippet;
 
 		Object.defineProperty( this, 'isNodeVary', { value: true } );
 

+ 6 - 2
examples/jsm/renderers/nodes/core/VaryNode.js

@@ -1,4 +1,5 @@
 import Node from './Node.js';
+import { NodeShaderStage } from './constants.js';
 
 class VaryNode extends Node {
 
@@ -22,9 +23,12 @@ class VaryNode extends Node {
 
 		const type = this.getType( builder );
 
-		const value = this.value.build( builder, type );
+		// force nodeVary.snippet work in vertex stage
+		const snippet = this.value.buildStage( builder, NodeShaderStage.Vertex, type );
+
+		const nodeVary = builder.getVaryFromNode( this, type );
+		nodeVary.snippet = snippet;
 
-		const nodeVary = builder.getVaryFromNode( this, type, value );
 		const propertyName = builder.getPropertyName( nodeVary );
 
 		return builder.format( propertyName, type, output );

+ 5 - 0
examples/jsm/renderers/nodes/core/constants.js

@@ -1,3 +1,8 @@
+export const NodeShaderStage = {
+	Vertex: 'vertex',
+	Fragment: 'fragment'
+};
+
 export const NodeUpdateType = {
 	None: 'none',
 	Frame: 'frame',

+ 1 - 1
examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js

@@ -244,7 +244,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
 
 			for ( const vary of this.varys ) {
 
-				snippet += `${vary.name} = ${vary.value};`;
+				snippet += `${vary.name} = ${vary.snippet};`;
 
 			}