three.fbo-helper
Version:
FrameBuffer Object inspector for three.js
77 lines (43 loc) • 1.4 kB
JavaScript
/**
* @author mrdoob / http://mrdoob.com/
*/
function WebGLIndexedBufferRenderer( gl, extensions, infoRender ) {
var mode;
function setMode( value ) {
mode = value;
}
var type, size;
function setIndex( index ) {
if ( index.array instanceof Uint32Array && extensions.get( 'OES_element_index_uint' ) ) {
type = gl.UNSIGNED_INT;
size = 4;
} else {
type = gl.UNSIGNED_SHORT;
size = 2;
}
}
function render( start, count ) {
gl.drawElements( mode, count, type, start * size );
infoRender.calls ++;
infoRender.vertices += count;
if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3;
}
function renderInstances( geometry, start, count ) {
var extension = extensions.get( 'ANGLE_instanced_arrays' );
if ( extension === null ) {
console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
return;
}
extension.drawElementsInstancedANGLE( mode, count, type, start * size, geometry.maxInstancedCount );
infoRender.calls ++;
infoRender.vertices += count * geometry.maxInstancedCount;
if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3;
}
return {
setMode: setMode,
setIndex: setIndex,
render: render,
renderInstances: renderInstances
};
}
export { WebGLIndexedBufferRenderer };