StackNode.js 1013 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import Node, { addNodeClass } from './Node.js';
  2. import { assign } from '../math/OperatorNode.js';
  3. import { bypass } from '../core/BypassNode.js';
  4. import { expression } from '../core/ExpressionNode.js';
  5. import { nodeProxy } from '../shadernode/ShaderNode.js';
  6. class StackNode extends Node {
  7. constructor() {
  8. super();
  9. this.nodes = [];
  10. this.outputNode = null;
  11. this.isStackNode = true;
  12. }
  13. getNodeType( builder ) {
  14. return this.outputNode ? this.outputNode.getNodeType( builder ) : 'void';
  15. }
  16. add( node ) {
  17. this.nodes.push( bypass( expression(), node ) );
  18. return this;
  19. }
  20. assign( targetNode, sourceValue ) {
  21. return this.add( assign( targetNode, sourceValue ) );
  22. }
  23. build( builder, ...params ) {
  24. for ( const node of this.nodes ) {
  25. node.build( builder );
  26. }
  27. return this.outputNode ? this.outputNode.build( builder, ...params ) : super.build( builder, ...params );
  28. }
  29. }
  30. export default StackNode;
  31. export const stack = nodeProxy( StackNode );
  32. addNodeClass( StackNode );