AssignNode.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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( targetNode, sourceNode ) {
  6. super();
  7. this.targetNode = targetNode;
  8. this.sourceNode = sourceNode;
  9. }
  10. hasDependencies() {
  11. return false;
  12. }
  13. getNodeType( builder, output ) {
  14. return output !== 'void' ? this.targetNode.getNodeType( builder ) : 'void';
  15. }
  16. generate( builder, output ) {
  17. const targetNode = this.targetNode;
  18. const sourceNode = this.sourceNode;
  19. const targetType = targetNode.getNodeType( builder );
  20. const target = targetNode.build( builder );
  21. const source = sourceNode.build( builder, targetType );
  22. const snippet = `${ target } = ${ source }`;
  23. if ( output === 'void' ) {
  24. builder.addLineFlowCode( snippet );
  25. return;
  26. } else {
  27. const sourceType = sourceNode.getNodeType( builder );
  28. if ( sourceType === 'void' ) {
  29. builder.addLineFlowCode( snippet );
  30. return target;
  31. }
  32. return builder.format( snippet, targetType, output );
  33. }
  34. }
  35. }
  36. export default AssignNode;
  37. export const assign = nodeProxy( AssignNode );
  38. addNodeClass( 'AssignNode', AssignNode );
  39. addNodeElement( 'assign', assign );