UNPKG

three

Version:

JavaScript 3D library

73 lines (40 loc) 1.4 kB
import Node, { addNodeClass } from './Node.js'; import { varying } from './VaryingNode.js'; import { nodeImmutable } from '../shadernode/ShaderNode.js'; class IndexNode extends Node { constructor( scope ) { super( 'uint' ); this.scope = scope; this.isInstanceIndexNode = true; } generate( builder ) { const nodeType = this.getNodeType( builder ); const scope = this.scope; let propertyName; if ( scope === IndexNode.VERTEX ) { propertyName = builder.getVertexIndex(); } else if ( scope === IndexNode.INSTANCE ) { propertyName = builder.getInstanceIndex(); } else if ( scope === IndexNode.DRAW ) { propertyName = builder.getDrawIndex(); } else { throw new Error( 'THREE.IndexNode: Unknown scope: ' + scope ); } let output; if ( builder.shaderStage === 'vertex' || builder.shaderStage === 'compute' ) { output = propertyName; } else { const nodeVarying = varying( this ); output = nodeVarying.build( builder, nodeType ); } return output; } } IndexNode.VERTEX = 'vertex'; IndexNode.INSTANCE = 'instance'; IndexNode.DRAW = 'draw'; export default IndexNode; export const vertexIndex = nodeImmutable( IndexNode, IndexNode.VERTEX ); export const instanceIndex = nodeImmutable( IndexNode, IndexNode.INSTANCE ); export const drawIndex = nodeImmutable( IndexNode, IndexNode.DRAW ); addNodeClass( 'IndexNode', IndexNode );