2
0

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. }
  9. setIncludes( includes ) {
  10. this._includes = includes;
  11. return this;
  12. }
  13. getIncludes( /*builder*/ ) {
  14. return this._includes;
  15. }
  16. generate( builder ) {
  17. if ( this.useKeywords === true ) {
  18. const contextKeywords = builder.context.keywords;
  19. if ( contextKeywords !== undefined ) {
  20. const nodeData = builder.getDataFromNode( this, builder.shaderStage );
  21. if ( nodeData.keywords === undefined ) {
  22. nodeData.keywords = [];
  23. }
  24. if ( nodeData.keywords.indexOf( contextKeywords ) === - 1 ) {
  25. contextKeywords.include( builder, this.code );
  26. nodeData.keywords.push( contextKeywords );
  27. }
  28. }
  29. }
  30. const includes = this.getIncludes( builder );
  31. for ( const include of includes ) {
  32. include.build( builder );
  33. }
  34. const nodeCode = builder.getCodeFromNode( this, this.getNodeType( builder ) );
  35. nodeCode.code = this.code;
  36. return nodeCode.code;
  37. }
  38. }
  39. CodeNode.prototype.isCodeNode = true;
  40. export default CodeNode;