three
Version:
JavaScript 3D library
71 lines (38 loc) • 1.24 kB
JavaScript
import { addNodeClass } from '../core/Node.js';
import AttributeNode from '../core/AttributeNode.js';
import { nodeObject } from '../shadernode/ShaderNode.js';
import { Vector4 } from 'three';
class VertexColorNode extends AttributeNode {
constructor( index = 0 ) {
super( null, 'vec4' );
this.isVertexColorNode = true;
this.index = index;
}
getAttributeName( /*builder*/ ) {
const index = this.index;
return 'color' + ( index > 0 ? index : '' );
}
generate( builder ) {
const attributeName = this.getAttributeName( builder );
const geometryAttribute = builder.hasGeometryAttribute( attributeName );
let result;
if ( geometryAttribute === true ) {
result = super.generate( builder );
} else {
// Vertex color fallback should be white
result = builder.generateConst( this.nodeType, new Vector4( 1, 1, 1, 1 ) );
}
return result;
}
serialize( data ) {
super.serialize( data );
data.index = this.index;
}
deserialize( data ) {
super.deserialize( data );
this.index = data.index;
}
}
export default VertexColorNode;
export const vertexColor = ( ...params ) => nodeObject( new VertexColorNode( ...params ) );
addNodeClass( 'VertexColorNode', VertexColorNode );