InstanceIndexNode.js 806 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import Node, { addNodeClass } from './Node.js';
  2. import { varying } from '../core/VaryingNode.js';
  3. import { nodeImmutable } from '../shadernode/ShaderNode.js';
  4. class InstanceIndexNode extends Node {
  5. constructor() {
  6. super( 'uint' );
  7. this.isInstanceIndexNode = true;
  8. }
  9. generate( builder ) {
  10. const nodeType = this.getNodeType( builder );
  11. const propertyName = builder.getInstanceIndex();
  12. let output = null;
  13. if ( builder.shaderStage === 'vertex' || builder.shaderStage === 'compute' ) {
  14. output = propertyName;
  15. } else {
  16. const nodeVarying = varying( this );
  17. output = nodeVarying.build( builder, nodeType );
  18. }
  19. return output;
  20. }
  21. }
  22. export default InstanceIndexNode;
  23. export const instanceIndex = nodeImmutable( InstanceIndexNode );
  24. addNodeClass( InstanceIndexNode );