85 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import Node, { addNodeClass } from '../core/Node.js'; | ||
|  | import { nodeProxy } from '../shadernode/ShaderNode.js'; | ||
|  | 
 | ||
|  | class CodeNode extends Node { | ||
|  | 
 | ||
|  | 	constructor( code = '', includes = [], language = '' ) { | ||
|  | 
 | ||
|  | 		super( 'code' ); | ||
|  | 
 | ||
|  | 		this.isCodeNode = true; | ||
|  | 
 | ||
|  | 		this.code = code; | ||
|  | 		this.language = language; | ||
|  | 
 | ||
|  | 		this.includes = includes; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	isGlobal() { | ||
|  | 
 | ||
|  | 		return true; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	setIncludes( includes ) { | ||
|  | 
 | ||
|  | 		this.includes = includes; | ||
|  | 
 | ||
|  | 		return this; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	getIncludes( /*builder*/ ) { | ||
|  | 
 | ||
|  | 		return this.includes; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	generate( builder ) { | ||
|  | 
 | ||
|  | 		const includes = this.getIncludes( builder ); | ||
|  | 
 | ||
|  | 		for ( const include of includes ) { | ||
|  | 
 | ||
|  | 			include.build( builder ); | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		const nodeCode = builder.getCodeFromNode( this, this.getNodeType( builder ) ); | ||
|  | 		nodeCode.code = this.code; | ||
|  | 
 | ||
|  | 		return nodeCode.code; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	serialize( data ) { | ||
|  | 
 | ||
|  | 		super.serialize( data ); | ||
|  | 
 | ||
|  | 		data.code = this.code; | ||
|  | 		data.language = this.language; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	deserialize( data ) { | ||
|  | 
 | ||
|  | 		super.deserialize( data ); | ||
|  | 
 | ||
|  | 		this.code = data.code; | ||
|  | 		this.language = data.language; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | export default CodeNode; | ||
|  | 
 | ||
|  | export const code = nodeProxy( CodeNode ); | ||
|  | 
 | ||
|  | export const js = ( src, includes ) => code( src, includes, 'js' ); | ||
|  | export const wgsl = ( src, includes ) => code( src, includes, 'wgsl' ); | ||
|  | export const glsl = ( src, includes ) => code( src, includes, 'glsl' ); | ||
|  | 
 | ||
|  | addNodeClass( 'CodeNode', CodeNode ); |