VarNode.js 945 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import Node, { addNodeClass } from './Node.js';
  2. import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
  3. class VarNode extends Node {
  4. constructor( node, name = null ) {
  5. super();
  6. this.node = node;
  7. this.name = name;
  8. }
  9. isGlobal() {
  10. return true;
  11. }
  12. getHash( builder ) {
  13. return this.name || super.getHash( builder );
  14. }
  15. getNodeType( builder ) {
  16. return this.node.getNodeType( builder );
  17. }
  18. generate( builder ) {
  19. const { node, name } = this;
  20. const nodeVar = builder.getVarFromNode( this, name, builder.getVectorType( this.getNodeType( builder ) ) );
  21. const propertyName = builder.getPropertyName( nodeVar );
  22. const snippet = node.build( builder, nodeVar.type );
  23. builder.addLineFlowCode( `${propertyName} = ${snippet}` );
  24. return propertyName;
  25. }
  26. }
  27. export default VarNode;
  28. export const temp = nodeProxy( VarNode );
  29. addNodeElement( 'temp', temp );
  30. addNodeClass( 'VarNode', VarNode );