2
0

VaryingNode.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import Node from './Node.js';
  2. import { NodeShaderStage } from './constants.js';
  3. class VaryingNode 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. // VaryingNode is auto type
  17. return this.node.getNodeType( builder );
  18. }
  19. generate( builder ) {
  20. const { name, node } = this;
  21. const type = this.getNodeType( builder );
  22. const nodeVarying = builder.getVaryingFromNode( this, type );
  23. // this property can be used to check if the varying can be optimized for a var
  24. nodeVarying.needsInterpolation || ( nodeVarying.needsInterpolation = ( builder.shaderStage === 'fragment' ) );
  25. if ( name !== null ) {
  26. nodeVarying.name = name;
  27. }
  28. const propertyName = builder.getPropertyName( nodeVarying, NodeShaderStage.VERTEX );
  29. // force node run in vertex stage
  30. builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, node, type, propertyName );
  31. return builder.getPropertyName( nodeVarying );
  32. }
  33. }
  34. export default VaryingNode;