ContextNode.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import Node, { addNodeClass } from './Node.js';
  2. import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
  3. class ContextNode extends Node {
  4. constructor( node, context = {} ) {
  5. super();
  6. this.isContextNode = true;
  7. this.node = node;
  8. this.context = context;
  9. }
  10. getNodeType( builder ) {
  11. return this.node.getNodeType( builder );
  12. }
  13. analyze( builder ) {
  14. this.node.build( builder );
  15. }
  16. setup( builder ) {
  17. const previousContext = builder.getContext();
  18. builder.setContext( { ...builder.context, ...this.context } );
  19. const node = this.node.build( builder );
  20. builder.setContext( previousContext );
  21. return node;
  22. }
  23. generate( builder, output ) {
  24. const previousContext = builder.getContext();
  25. builder.setContext( { ...builder.context, ...this.context } );
  26. const snippet = this.node.build( builder, output );
  27. builder.setContext( previousContext );
  28. return snippet;
  29. }
  30. }
  31. export default ContextNode;
  32. export const context = nodeProxy( ContextNode );
  33. export const label = ( node, name ) => context( node, { label: name } );
  34. addNodeElement( 'context', context );
  35. addNodeElement( 'label', label );
  36. addNodeClass( 'ContextNode', ContextNode );