AttributeNode.js 1.0 KB

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