Przeglądaj źródła

mrdoob approves

sunag 4 lat temu
rodzic
commit
24ccdf0635

+ 24 - 24
examples/jsm/renderers/nodes/core/InputNode.js

@@ -3,54 +3,54 @@ import Node from './Node.js';
 class InputNode extends Node {
 class InputNode extends Node {
 
 
 	constructor( type ) {
 	constructor( type ) {
-		
+
 		super( type );
 		super( type );
 
 
 		this.constant = false;
 		this.constant = false;
-		
+
 		Object.defineProperty( this, 'isInputNode', { value: true } );
 		Object.defineProperty( this, 'isInputNode', { value: true } );
-		
+
 	}
 	}
-	
+
 	setConst( value ) {
 	setConst( value ) {
-		
+
 		this.constant = value;
 		this.constant = value;
-		
+
 		return this;
 		return this;
-		
+
 	}
 	}
-	
+
 	getConst() {
 	getConst() {
-		
+
 		return this.constant;
 		return this.constant;
-		
+
 	}
 	}
-	
+
 	generateConst( /*builder*/ ) {
 	generateConst( /*builder*/ ) {
-		
-		console.warn("Abstract function");
-		
+
+		console.warn( "Abstract function" );
+
 	}
 	}
-	
+
 	generate( builder, output ) {
 	generate( builder, output ) {
-		
+
 		const type = this.getType( builder );
 		const type = this.getType( builder );
-		
+
 		if ( this.constant === true ) {
 		if ( this.constant === true ) {
-		
+
 			return builder.format( this.generateConst( builder ), type, output );
 			return builder.format( this.generateConst( builder ), type, output );
-			
+
 		} else {
 		} else {
-			
+
 			const nodeUniform = builder.getUniformFromNode( this, builder.shaderStage, this.getType( builder ) );
 			const nodeUniform = builder.getUniformFromNode( this, builder.shaderStage, this.getType( builder ) );
 			const nsName = builder.getUniformNSName( nodeUniform );
 			const nsName = builder.getUniformNSName( nodeUniform );
-			
+
 			return builder.format( nsName, type, output );
 			return builder.format( nsName, type, output );
-			
+
 		}
 		}
-		
+
 	}
 	}
-	
+
 }
 }
 
 
 export default InputNode;
 export default InputNode;

+ 14 - 14
examples/jsm/renderers/nodes/core/Node.js

@@ -1,31 +1,31 @@
 class Node {
 class Node {
 
 
 	constructor( type ) {
 	constructor( type ) {
-		
+
 		this.type = type;
 		this.type = type;
-		
+
 		Object.defineProperty( this, 'isNode', { value: true } );
 		Object.defineProperty( this, 'isNode', { value: true } );
-		
+
 	}
 	}
-	
+
 	getType( /*builder*/ ) {
 	getType( /*builder*/ ) {
-		
+
 		return this.type;
 		return this.type;
-		
+
 	}
 	}
-	
+
 	generate( /*builder, output*/ ) {
 	generate( /*builder, output*/ ) {
-		
-		console.warn("Abstract function");
-		
+
+		console.warn( "Abstract function" );
+
 	}
 	}
-	
+
 	build( builder, output ) {
 	build( builder, output ) {
-		
+
 		return this.generate( builder, output );
 		return this.generate( builder, output );
-		
+
 	}
 	}
-	
+
 }
 }
 
 
 export default Node;
 export default Node;

+ 90 - 90
examples/jsm/renderers/nodes/core/NodeBuilder.js

@@ -5,62 +5,62 @@ const VERSION = '1';
 class NodeBuilder {
 class NodeBuilder {
 
 
 	constructor( material, renderer ) {
 	constructor( material, renderer ) {
-		
+
 		this.material = material;
 		this.material = material;
 		this.renderer = renderer;
 		this.renderer = renderer;
-		
+
 		this.slots = { vertex: [], fragment: [] };
 		this.slots = { vertex: [], fragment: [] };
 		this.defines = { vertex: {}, fragment: {} };
 		this.defines = { vertex: {}, fragment: {} };
 		this.uniforms = { vertex: [], fragment: [] };
 		this.uniforms = { vertex: [], fragment: [] };
-		
+
 		this.nodesData = new WeakMap();
 		this.nodesData = new WeakMap();
-		
+
 		this.shaderStage = null;
 		this.shaderStage = null;
-		
+
 	}
 	}
-	
+
 	addSlot( shader, slot ) {
 	addSlot( shader, slot ) {
-		
+
 		this.slots[ shader ].push( slot );
 		this.slots[ shader ].push( slot );
-		
+
 	}
 	}
-	
+
 	define( shader, name, value = '' ) {
 	define( shader, name, value = '' ) {
-		
+
 		this.defines[ shader ][ name ] = value;
 		this.defines[ shader ][ name ] = value;
-		
+
 	}
 	}
-	
+
 	generateVec2( x, y ) {
 	generateVec2( x, y ) {
-		
+
 		return `vec2( ${x}, ${y})`;
 		return `vec2( ${x}, ${y})`;
-		
+
 	}
 	}
-	
+
 	generateVec3( x, y, z ) {
 	generateVec3( x, y, z ) {
-		
+
 		return `vec3( ${x}, ${y}, ${z} )`;
 		return `vec3( ${x}, ${y}, ${z} )`;
-		
+
 	}
 	}
-	
+
 	generateVec4( x, y, z, w ) {
 	generateVec4( x, y, z, w ) {
-		
+
 		return `vec4( ${x}, ${y}, ${z}, ${w} )`;
 		return `vec4( ${x}, ${y}, ${z}, ${w} )`;
-		
+
 	}
 	}
-	
+
 	generateFloat( value ) {
 	generateFloat( value ) {
-		
+
 		return value + ( value % 1 ? '' : '.0' );
 		return value + ( value % 1 ? '' : '.0' );
-		
+
 	}
 	}
-	
+
 	getUniformNSName( nodeUniform ) {
 	getUniformNSName( nodeUniform ) {
-		
+
 		return nodeUniform.name;
 		return nodeUniform.name;
-		
+
 	}
 	}
-	
+
 	getTypeLength( type ) {
 	getTypeLength( type ) {
 
 
 		if ( type === 'float' ) return 1;
 		if ( type === 'float' ) return 1;
@@ -71,121 +71,121 @@ class NodeBuilder {
 		return 0;
 		return 0;
 
 
 	}
 	}
-	
+
 	getDataFromNode( node, shaderStage = null ) {
 	getDataFromNode( node, shaderStage = null ) {
-		
+
 		let nodeData = this.nodesData.get( node );
 		let nodeData = this.nodesData.get( node );
-		
+
 		if ( nodeData === undefined ) {
 		if ( nodeData === undefined ) {
-			
+
 			nodeData = { vertex: {}, fragment: {} };
 			nodeData = { vertex: {}, fragment: {} };
-			
+
 			this.nodesData.set( node, nodeData );
 			this.nodesData.set( node, nodeData );
-			
+
 		}
 		}
-		
+
 		return shaderStage ? nodeData[ shaderStage ] : nodeData;
 		return shaderStage ? nodeData[ shaderStage ] : nodeData;
-		
+
 	}
 	}
-	
+
 	getUniformFromNode( node, shaderStage, type ) {
 	getUniformFromNode( node, shaderStage, type ) {
-		
+
 		const nodeData = this.getDataFromNode( node, shaderStage );
 		const nodeData = this.getDataFromNode( node, shaderStage );
-		
+
 		let nodeUniform = nodeData.uniform;
 		let nodeUniform = nodeData.uniform;
-		
+
 		if ( nodeUniform === undefined ) {
 		if ( nodeUniform === undefined ) {
-			
-			const uniforms = this.uniforms[shaderStage];
+
+			const uniforms = this.uniforms[ shaderStage ];
 			const index = uniforms.length;
 			const index = uniforms.length;
-			
+
 			nodeUniform = new NodeUniform( 'nodeU' + index, type, node );
 			nodeUniform = new NodeUniform( 'nodeU' + index, type, node );
-			
+
 			uniforms.push( nodeUniform );
 			uniforms.push( nodeUniform );
-			
+
 			nodeData.uniform = nodeUniform;
 			nodeData.uniform = nodeUniform;
-			
+
 		}
 		}
-		
+
 		return nodeUniform;
 		return nodeUniform;
-		
+
 	}
 	}
-	
+
 	/*
 	/*
 	analyzeNode( node ) {
 	analyzeNode( node ) {
-		
-		
+
+
 	}
 	}
 	*/
 	*/
-	
+
 	flowNode( node, output ) {
 	flowNode( node, output ) {
-		
+
 		let flowData = {};
 		let flowData = {};
 		flowData.result = node.build( this, output );
 		flowData.result = node.build( this, output );
-		
+
 		return flowData;
 		return flowData;
-		
+
 	}
 	}
-	
+
 	buildDefines( shader ) {
 	buildDefines( shader ) {
-		
+
 		const defines = this.defines[ shader ];
 		const defines = this.defines[ shader ];
-		
+
 		let code = '';
 		let code = '';
-		
+
 		for ( let name in defines ) {
 		for ( let name in defines ) {
-			
-			code += `#define ${name} ${defines[name]}\n`;
-			
+
+			code += `#define ${name} ${defines[ name ]}\n`;
+
 		}
 		}
-		
+
 		return code;
 		return code;
-		
+
 	}
 	}
-	
+
 	build( shaderStage ) {
 	build( shaderStage ) {
-		
+
 		this.shaderStage = shaderStage;
 		this.shaderStage = shaderStage;
-		
+
 		const slots = this.slots[ shaderStage ];
 		const slots = this.slots[ shaderStage ];
 		const uniforms = this.uniforms[ shaderStage ];
 		const uniforms = this.uniforms[ shaderStage ];
-		
+
 		if ( slots.length ) {
 		if ( slots.length ) {
-			
+
 			this.define( shaderStage, 'NODE', VERSION );
 			this.define( shaderStage, 'NODE', VERSION );
-			
-			for( let i = 0; i < slots.length; i++) {
-			
-				let slot = slots[i];
-				
+
+			for ( let i = 0; i < slots.length; i ++ ) {
+
+				let slot = slots[ i ];
+
 				let flowData = this.flowNode( slot.node, slot.output );
 				let flowData = this.flowNode( slot.node, slot.output );
-				
+
 				this.define( shaderStage, `NODE_${slot.name}`, flowData.result );
 				this.define( shaderStage, `NODE_${slot.name}`, flowData.result );
-				
+
 			}
 			}
-			
+
 			let uniformsCode = '';
 			let uniformsCode = '';
-			
-			for( let i = 0; i < uniforms.length; i++) {
-				
-				let uniform = uniforms[i];
-				
+
+			for ( let i = 0; i < uniforms.length; i ++ ) {
+
+				let uniform = uniforms[ i ];
+
 				uniformsCode += `${uniform.type} ${uniform.name}; `;
 				uniformsCode += `${uniform.type} ${uniform.name}; `;
-				
+
 			}
 			}
-			
+
 			this.define( shaderStage, 'NODE_UNIFORMS', uniformsCode );
 			this.define( shaderStage, 'NODE_UNIFORMS', uniformsCode );
-			
+
 		}
 		}
-		
+
 		let defines = this.buildDefines( shaderStage );
 		let defines = this.buildDefines( shaderStage );
-		
+
 		return {
 		return {
 			defines
 			defines
 		};
 		};
-		
+
 	}
 	}
-	
+
 	format( code, fromType, toType ) {
 	format( code, fromType, toType ) {
 
 
 		const typeToType = `${fromType} -> ${toType}`;
 		const typeToType = `${fromType} -> ${toType}`;
@@ -193,7 +193,7 @@ class NodeBuilder {
 		switch ( typeToType ) {
 		switch ( typeToType ) {
 
 
 			case 'float -> vec3' : return `vec3( ${code} )`;
 			case 'float -> vec3' : return `vec3( ${code} )`;
-			
+
 			case 'vec3 -> float' : return `${code}.x`;
 			case 'vec3 -> float' : return `${code}.x`;
 
 
 		}
 		}
@@ -201,7 +201,7 @@ class NodeBuilder {
 		return code;
 		return code;
 
 
 	}
 	}
-	
+
 }
 }
 
 
 export default NodeBuilder;
 export default NodeBuilder;

+ 3 - 3
examples/jsm/renderers/nodes/core/NodeSlot.js

@@ -1,13 +1,13 @@
 class NodeSlot {
 class NodeSlot {
 
 
 	constructor( node, name, output ) {
 	constructor( node, name, output ) {
-		
+
 		this.node = node;
 		this.node = node;
 		this.name = name;
 		this.name = name;
 		this.output = output;
 		this.output = output;
-		
+
 	}
 	}
-	
+
 }
 }
 
 
 export default NodeSlot;
 export default NodeSlot;

+ 5 - 5
examples/jsm/renderers/nodes/core/NodeUniform.js

@@ -10,15 +10,15 @@ class NodeUniform {
 	}
 	}
 
 
 	get value() {
 	get value() {
-		
+
 		return this.node.value;
 		return this.node.value;
-		
+
 	}
 	}
-	
+
 	set value( val ) {
 	set value( val ) {
-		
+
 		this.node.value = val;
 		this.node.value = val;
-		
+
 	}
 	}
 
 
 }
 }

+ 8 - 8
examples/jsm/renderers/nodes/math/OperatorNode.js

@@ -1,23 +1,23 @@
 import Node from '../core/Node.js';
 import Node from '../core/Node.js';
 
 
- class OperatorNode extends Node {
+class OperatorNode extends Node {
 
 
 	constructor( op, a, b ) {
 	constructor( op, a, b ) {
 
 
 		super();
 		super();
 
 
 		this.op = op;
 		this.op = op;
-		
+
 		this.a = a;
 		this.a = a;
 		this.b = b;
 		this.b = b;
-		
+
 	}
 	}
 
 
 	getType( builder ) {
 	getType( builder ) {
-		
+
 		const typeA = this.a.getType( builder );
 		const typeA = this.a.getType( builder );
 		const typeB = this.b.getType( builder );
 		const typeB = this.b.getType( builder );
-		
+
 		if ( builder.getTypeLength( typeB ) > builder.getTypeLength( typeA ) ) {
 		if ( builder.getTypeLength( typeB ) > builder.getTypeLength( typeA ) ) {
 
 
 			// use the greater length vector
 			// use the greater length vector
@@ -27,7 +27,7 @@ import Node from '../core/Node.js';
 		}
 		}
 
 
 		return typeA;
 		return typeA;
-		
+
 	}
 	}
 
 
 	generate( builder, output ) {
 	generate( builder, output ) {
@@ -40,7 +40,7 @@ import Node from '../core/Node.js';
 		return builder.format( '( ' + a + ' ' + this.op + ' ' + b + ' )', type, output );
 		return builder.format( '( ' + a + ' ' + this.op + ' ' + b + ' )', type, output );
 
 
 	}
 	}
-		
- }
+
+}
 
 
 export default OperatorNode;
 export default OperatorNode;

+ 66 - 65
examples/jsm/renderers/webgpu/WebGPUNodeBuilder.js

@@ -5,28 +5,29 @@ import NodeSlot from '../nodes/core/NodeSlot.js';
 import NodeBuilder from '../nodes/core/NodeBuilder.js';
 import NodeBuilder from '../nodes/core/NodeBuilder.js';
 
 
 class WebGPUNodeUniformsGroup extends WebGPUUniformsGroup {
 class WebGPUNodeUniformsGroup extends WebGPUUniformsGroup {
-	
+
 	constructor( shaderStage ) {
 	constructor( shaderStage ) {
 
 
 		super( 'nodeUniforms' );
 		super( 'nodeUniforms' );
-		
+
 		let shaderStageVisibility;
 		let shaderStageVisibility;
-		
+
 		if ( shaderStage === 'vertex' ) shaderStageVisibility = GPUShaderStage.VERTEX;
 		if ( shaderStage === 'vertex' ) shaderStageVisibility = GPUShaderStage.VERTEX;
 		else if ( shaderStage === 'fragment' ) shaderStageVisibility = GPUShaderStage.FRAGMENT;
 		else if ( shaderStage === 'fragment' ) shaderStageVisibility = GPUShaderStage.FRAGMENT;
-			
+
 		this.setVisibility( shaderStageVisibility );
 		this.setVisibility( shaderStageVisibility );
-		
+
 		//this.setOnBeforeUpdate( this._onBeforeUpdate );
 		//this.setOnBeforeUpdate( this._onBeforeUpdate );
-		
+
 	}
 	}
 	/*
 	/*
 	_onBeforeUpdate( object, camera ) {
 	_onBeforeUpdate( object, camera ) {
-		
+
 		const material = object.material;
 		const material = object.material;
-		
+
 	}
 	}
 	*/
 	*/
+
 }
 }
 
 
 class WebGPUNodeBuilder extends NodeBuilder {
 class WebGPUNodeBuilder extends NodeBuilder {
@@ -34,117 +35,117 @@ class WebGPUNodeBuilder extends NodeBuilder {
 	constructor( material, renderer ) {
 	constructor( material, renderer ) {
 
 
 		super( material, renderer );
 		super( material, renderer );
-		
+
 		this.uniformsGroup = {};
 		this.uniformsGroup = {};
-		
+
 		this._parseMaterial();
 		this._parseMaterial();
-		
+
 	}
 	}
-	
+
 	_parseMaterial() {
 	_parseMaterial() {
-		
+
 		const material = this.material;
 		const material = this.material;
-		
+
 		if ( material.isMeshBasicMaterial || material.isPointsMaterial ) {
 		if ( material.isMeshBasicMaterial || material.isPointsMaterial ) {
-			
+
 			if ( material.colorNode !== undefined ) {
 			if ( material.colorNode !== undefined ) {
-				
+
 				this.addSlot( 'fragment', new NodeSlot( material.colorNode, 'COLOR', 'vec3' ) );
 				this.addSlot( 'fragment', new NodeSlot( material.colorNode, 'COLOR', 'vec3' ) );
-				
+
 			}
 			}
-			
+
 			if ( material.opacityNode !== undefined ) {
 			if ( material.opacityNode !== undefined ) {
-				
+
 				this.addSlot( 'fragment', new NodeSlot( material.opacityNode, 'OPACITY', 'float' ) );
 				this.addSlot( 'fragment', new NodeSlot( material.opacityNode, 'OPACITY', 'float' ) );
-				
+
 			}
 			}
-			
+
 		}
 		}
-		
+
 	}
 	}
-	
+
 	getUniformNSName( nodeUniform ) {
 	getUniformNSName( nodeUniform ) {
-		
+
 		return `nodeUniforms.${nodeUniform.name}`;
 		return `nodeUniforms.${nodeUniform.name}`;
-		
+
 	}
 	}
-	
+
 	getBindings() {
 	getBindings() {
-		
+
 		const bindings = [];
 		const bindings = [];
-		
+
 		const uniformsVertexGroup = this.uniformsGroup[ 'vertex' ];
 		const uniformsVertexGroup = this.uniformsGroup[ 'vertex' ];
 		const uniformsFragmentGroup = this.uniformsGroup[ 'fragment' ];
 		const uniformsFragmentGroup = this.uniformsGroup[ 'fragment' ];
-		
+
 		if ( uniformsVertexGroup ) bindings.push( uniformsVertexGroup );
 		if ( uniformsVertexGroup ) bindings.push( uniformsVertexGroup );
 		if ( uniformsFragmentGroup ) bindings.push( uniformsFragmentGroup );
 		if ( uniformsFragmentGroup ) bindings.push( uniformsFragmentGroup );
-		
+
 		return bindings;
 		return bindings;
-		
+
 	}
 	}
-	
+
 	getUniformFromNode( node, shaderStage, type ) {
 	getUniformFromNode( node, shaderStage, type ) {
-		
-		const uniformNode = super.getUniformFromNode( node, shaderStage, type ) 
+
+		const uniformNode = super.getUniformFromNode( node, shaderStage, type );
 		const nodeData = this.getDataFromNode( node, shaderStage );
 		const nodeData = this.getDataFromNode( node, shaderStage );
-		
+
 		if ( nodeData.uniformGroup === undefined ) {
 		if ( nodeData.uniformGroup === undefined ) {
-			
-			let uniformsGroup = this.uniformsGroup[shaderStage];
-			
-			if (uniformsGroup === undefined) {
-				
+
+			let uniformsGroup = this.uniformsGroup[ shaderStage ];
+
+			if ( uniformsGroup === undefined ) {
+
 				uniformsGroup = new WebGPUNodeUniformsGroup( shaderStage );
 				uniformsGroup = new WebGPUNodeUniformsGroup( shaderStage );
-				
-				this.uniformsGroup[shaderStage] = uniformsGroup;
-				
+
+				this.uniformsGroup[ shaderStage ] = uniformsGroup;
+
 			}
 			}
-			
+
 			let uniformGroup;
 			let uniformGroup;
-			
+
 			if ( type === 'float' ) {
 			if ( type === 'float' ) {
-				
+
 				uniformGroup = new FloatUniform( uniformNode.name, uniformNode.value );
 				uniformGroup = new FloatUniform( uniformNode.name, uniformNode.value );
-				
+
 			} else if ( type === 'vec3' ) {
 			} else if ( type === 'vec3' ) {
-				
+
 				uniformGroup = new Vector3Uniform( uniformNode.name, uniformNode.value );
 				uniformGroup = new Vector3Uniform( uniformNode.name, uniformNode.value );
-				
+
 			} else {
 			} else {
-				
+
 				console.error( `Uniform "${type}" not declared.` );
 				console.error( `Uniform "${type}" not declared.` );
-				
+
 			}
 			}
-			
+
 			uniformsGroup.addUniform( uniformGroup );
 			uniformsGroup.addUniform( uniformGroup );
-			
+
 			nodeData.uniformGroup = uniformGroup;
 			nodeData.uniformGroup = uniformGroup;
-			
+
 		}
 		}
-		
+
 		return uniformNode;
 		return uniformNode;
-		
+
 	}
 	}
-	
+
 	buildShader( shaderStage, code ) {
 	buildShader( shaderStage, code ) {
-		
+
 		// use regex maybe for security?
 		// use regex maybe for security?
-		const versionStrIndex = code.indexOf("\n");
-		
+		const versionStrIndex = code.indexOf( "\n" );
+
 		let finalCode = code.substr( 0, versionStrIndex ) + "\n\n";
 		let finalCode = code.substr( 0, versionStrIndex ) + "\n\n";
 
 
 		const shaderCodes = this.build( shaderStage );
 		const shaderCodes = this.build( shaderStage );
-		
+
 		finalCode += shaderCodes.defines;
 		finalCode += shaderCodes.defines;
 
 
 		finalCode += code.substr( versionStrIndex );
 		finalCode += code.substr( versionStrIndex );
 
 
 		return finalCode;
 		return finalCode;
-		
+
 	}
 	}
-	
+
 	parse( vertexShader, fragmentShader ) {
 	parse( vertexShader, fragmentShader ) {
-		
+
 		vertexShader = this.buildShader( 'vertex', vertexShader );
 		vertexShader = this.buildShader( 'vertex', vertexShader );
 		fragmentShader = this.buildShader( 'fragment', fragmentShader );
 		fragmentShader = this.buildShader( 'fragment', fragmentShader );
 
 
@@ -152,7 +153,7 @@ class WebGPUNodeBuilder extends NodeBuilder {
 			vertexShader,
 			vertexShader,
 			fragmentShader
 			fragmentShader
 		};
 		};
-		
+
 	}
 	}
 
 
 }
 }