AssignNode.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { addNodeClass } from '../core/Node.js';
  2. import TempNode from '../core/TempNode.js';
  3. import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
  4. class AssignNode extends TempNode {
  5. constructor( aNode, bNode ) {
  6. super();
  7. this.aNode = aNode;
  8. this.bNode = bNode;
  9. }
  10. hasDependencies( builder ) {
  11. return false;
  12. }
  13. getNodeType( builder, output ) {
  14. const aNode = this.aNode;
  15. const bNode = this.bNode;
  16. const typeA = aNode.getNodeType( builder );
  17. const typeB = bNode.getNodeType( builder );
  18. return typeB === 'void' ? 'void' : typeA;
  19. }
  20. generate( builder, output ) {
  21. const aNode = this.aNode;
  22. const bNode = this.bNode;
  23. const type = this.getNodeType( builder, output );
  24. const a = aNode.build( builder, type );
  25. const b = bNode.build( builder, type );
  26. if ( output !== 'void' ) {
  27. builder.addLineFlowCode( `${a} = ${b}` );
  28. return a;
  29. } else if ( type !== 'void' ) {
  30. return builder.format( `${a} = ${b}`, type, output );
  31. }
  32. }
  33. }
  34. export default AssignNode;
  35. export const assign = nodeProxy( AssignNode );
  36. addNodeClass( 'AssignNode', AssignNode );
  37. addNodeElement( 'assign', assign );