AttributeNode.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import Node from './Node.js';
  2. class AttributeNode extends Node {
  3. constructor( name, type ) {
  4. super( type );
  5. this.name = name;
  6. }
  7. setAttributeName( name ) {
  8. this.name = name;
  9. return this;
  10. }
  11. getAttributeName( /*builder*/ ) {
  12. return this.name;
  13. }
  14. generate( builder, output ) {
  15. const attributeName = this.getAttributeName( builder );
  16. const attributeType = this.getType( builder );
  17. const attribute = builder.getAttribute( attributeName, attributeType );
  18. if ( builder.isShaderStage( 'vertex' ) ) {
  19. return builder.format( attribute.name, attribute.type, output );
  20. } else {
  21. const nodeData = builder.getDataFromNode( this, builder.shaderStage );
  22. let nodeVary = nodeData.varyNode;
  23. if ( nodeVary === undefined ) {
  24. nodeVary = builder.getVaryFromNode( this, attribute.type );
  25. nodeVary.snippet = attributeName;
  26. nodeData.nodeVary = nodeVary;
  27. }
  28. const varyName = builder.getPropertyName( nodeVary );
  29. return builder.format( varyName, attribute.type, output );
  30. }
  31. }
  32. }
  33. export default AttributeNode;