CodeNode.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Node, { addNodeClass } from '../core/Node.js';
  2. import { nodeProxy } from '../shadernode/ShaderNode.js';
  3. class CodeNode extends Node {
  4. constructor( code = '', includes = [], language = '' ) {
  5. super( 'code' );
  6. this.isCodeNode = true;
  7. this.code = code;
  8. this.language = language;
  9. this.includes = includes;
  10. }
  11. setIncludes( includes ) {
  12. this.includes = includes;
  13. return this;
  14. }
  15. getIncludes( /*builder*/ ) {
  16. return this.includes;
  17. }
  18. generate( builder ) {
  19. const includes = this.getIncludes( builder );
  20. for ( const include of includes ) {
  21. include.build( builder );
  22. }
  23. const nodeCode = builder.getCodeFromNode( this, this.getNodeType( builder ) );
  24. nodeCode.code = this.code;
  25. return nodeCode.code;
  26. }
  27. serialize( data ) {
  28. super.serialize( data );
  29. data.code = this.code;
  30. data.language = this.language;
  31. }
  32. deserialize( data ) {
  33. super.deserialize( data );
  34. this.code = data.code;
  35. this.language = data.language;
  36. }
  37. }
  38. export default CodeNode;
  39. export const code = nodeProxy( CodeNode );
  40. export const js = ( src, includes ) => code( src, includes, 'js' );
  41. export const wgsl = ( src, includes ) => code( src, includes, 'wgsl' );
  42. export const glsl = ( src, includes ) => code( src, includes, 'glsl' );
  43. addNodeClass( 'CodeNode', CodeNode );