VaryNode.js 910 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import Node from './Node.js';
  2. import { NodeShaderStage } from './constants.js';
  3. class VaryNode extends Node {
  4. constructor( node, name = null ) {
  5. super();
  6. this.node = node;
  7. this.name = name;
  8. }
  9. getHash( builder ) {
  10. return this.name || super.getHash( builder );
  11. }
  12. getNodeType( builder ) {
  13. // VaryNode is auto type
  14. return this.node.getNodeType( builder );
  15. }
  16. generate( builder ) {
  17. const type = this.getNodeType( builder );
  18. const node = this.node;
  19. const name = this.name;
  20. const nodeVary = builder.getVaryFromNode( this, type );
  21. if ( name !== null ) {
  22. nodeVary.name = name;
  23. }
  24. const propertyName = builder.getPropertyName( nodeVary, NodeShaderStage.Vertex );
  25. // force node run in vertex stage
  26. builder.flowNodeFromShaderStage( NodeShaderStage.Vertex, node, type, propertyName );
  27. return builder.getPropertyName( nodeVary );
  28. }
  29. }
  30. export default VaryNode;