CodeNode.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. isGlobal() {
  12. return true;
  13. }
  14. setIncludes( includes ) {
  15. this.includes = includes;
  16. return this;
  17. }
  18. getIncludes( /*builder*/ ) {
  19. return this.includes;
  20. }
  21. generate( builder ) {
  22. const includes = this.getIncludes( builder );
  23. for ( const include of includes ) {
  24. include.build( builder );
  25. }
  26. const nodeCode = builder.getCodeFromNode( this, this.getNodeType( builder ) );
  27. nodeCode.code = this.code;
  28. return nodeCode.code;
  29. }
  30. serialize( data ) {
  31. super.serialize( data );
  32. data.code = this.code;
  33. data.language = this.language;
  34. }
  35. deserialize( data ) {
  36. super.deserialize( data );
  37. this.code = data.code;
  38. this.language = data.language;
  39. }
  40. }
  41. export default CodeNode;
  42. export const code = nodeProxy( CodeNode );
  43. export const js = ( src, includes ) => code( src, includes, 'js' );
  44. export const wgsl = ( src, includes ) => code( src, includes, 'wgsl' );
  45. export const glsl = ( src, includes ) => code( src, includes, 'glsl' );
  46. addNodeClass( 'CodeNode', CodeNode );