CodeNode.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import Node from './Node.js';
  2. class CodeNode extends Node {
  3. constructor( code = '', type = 'code' ) {
  4. super( type );
  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, output ) {
  18. if ( this.useKeywords === true ) {
  19. const contextKeywords = builder.getContextParameter( '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 type = this.getType( builder );
  36. const nodeCode = builder.getCodeFromNode( this, type );
  37. nodeCode.code = this.code;
  38. return nodeCode.code;
  39. }
  40. }
  41. export default CodeNode;