CodeNode.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Node from './Node.js';
  2. class CodeNode extends Node {
  3. constructor( code = '', nodeType = 'code' ) {
  4. super( nodeType );
  5. this.code = code;
  6. this.useKeywords = false;
  7. this._includes = [];
  8. Object.defineProperty( this, 'isCodeNode', { value: true } );
  9. }
  10. setIncludes( includes ) {
  11. this._includes = includes;
  12. return this;
  13. }
  14. getIncludes( /*builder*/ ) {
  15. return this._includes;
  16. }
  17. generate( builder ) {
  18. if ( this.useKeywords === true ) {
  19. const contextKeywords = builder.getContextValue( 'keywords' );
  20. if ( contextKeywords !== undefined ) {
  21. const nodeData = builder.getDataFromNode( this, builder.shaderStage );
  22. if ( nodeData.keywords === undefined ) {
  23. nodeData.keywords = [];
  24. }
  25. if ( nodeData.keywords.indexOf( contextKeywords ) === - 1 ) {
  26. contextKeywords.include( builder, this.code );
  27. nodeData.keywords.push( contextKeywords );
  28. }
  29. }
  30. }
  31. const includes = this.getIncludes( builder );
  32. for ( const include of includes ) {
  33. include.build( builder );
  34. }
  35. const nodeCode = builder.getCodeFromNode( this, this.getNodeType( builder ) );
  36. nodeCode.code = this.code;
  37. return nodeCode.code;
  38. }
  39. }
  40. export default CodeNode;