You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.3 KiB
85 lines
1.3 KiB
6 months ago
|
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 );
|