60 lines
818 B
JavaScript
60 lines
818 B
JavaScript
export class Mesh {
|
|
|
|
constructor( ) {
|
|
|
|
this.shaders = [];
|
|
|
|
this.instanceCount = 1;
|
|
|
|
}
|
|
|
|
|
|
addShader( shader, options = { } ) {
|
|
|
|
this.shaders.push( {
|
|
shader,
|
|
options
|
|
} );
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
setInstanceCount( count ) {
|
|
|
|
this.instanceCount = count;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
draw( passEncoder ) {
|
|
|
|
for ( const entry of this.shaders ) {
|
|
|
|
const shader = entry.shader;
|
|
|
|
const opts = entry.options || { };
|
|
|
|
const instances = opts.instances != null ? opts.instances : this.instanceCount;
|
|
|
|
// When no explicit vertex count is provided, rely on the shader's indexCount
|
|
const vertexCount = opts.vertexCount != null ? opts.vertexCount : ( shader.indexCount || 0 );
|
|
|
|
if ( vertexCount <= 0 ) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
shader.encodeRender( passEncoder, vertexCount, instances );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|