VarNode.js 1.0 KB

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