VarNode.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. this.isVarNode = true;
  9. }
  10. isGlobal() {
  11. return true;
  12. }
  13. getHash( builder ) {
  14. return this.name || super.getHash( builder );
  15. }
  16. getNodeType( builder ) {
  17. return this.node.getNodeType( builder );
  18. }
  19. generate( builder ) {
  20. const { node, name } = this;
  21. const nodeVar = builder.getVarFromNode( this, name, builder.getVectorType( this.getNodeType( builder ) ) );
  22. const propertyName = builder.getPropertyName( nodeVar );
  23. const snippet = node.build( builder, nodeVar.type );
  24. builder.addLineFlowCode( `${propertyName} = ${snippet}` );
  25. return propertyName;
  26. }
  27. }
  28. export default VarNode;
  29. export const temp = nodeProxy( VarNode );
  30. addNodeElement( 'temp', temp ); // @TODO: Will be removed in the future
  31. addNodeElement( 'toVar', ( ...params ) => temp( ...params ).append() );
  32. addNodeClass( 'VarNode', VarNode );