ContextNode.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. construct( builder ) {
  14. const previousContext = builder.getContext();
  15. builder.setContext( { ...builder.context, ...this.context } );
  16. const node = this.node.build( builder );
  17. builder.setContext( previousContext );
  18. return node;
  19. }
  20. generate( builder, output ) {
  21. const previousContext = builder.getContext();
  22. builder.setContext( { ...builder.context, ...this.context } );
  23. const snippet = this.node.build( builder, output );
  24. builder.setContext( previousContext );
  25. return snippet;
  26. }
  27. }
  28. export default ContextNode;
  29. export const context = nodeProxy( ContextNode );
  30. addNodeElement( 'context', context );
  31. addNodeClass( ContextNode );