diff --git a/src/renderers/webgl/WebGLIndexedBufferRenderer.js b/src/renderers/webgl/WebGLIndexedBufferRenderer.js new file mode 100644 index 0000000000000000000000000000000000000000..09a785b22700908b06ff37839cbfcf90728eb4cf --- /dev/null +++ b/src/renderers/webgl/WebGLIndexedBufferRenderer.js @@ -0,0 +1,77 @@ +/** +* @author mrdoob / http://mrdoob.com/ +*/ + +THREE.WebGLIndexedBufferRenderer = function ( _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 renderGroups( groups ) { + + for ( var i = 0, il = groups.length; i < il; i ++ ) { + + var group = groups[ i ]; + render( group.start, group.count ); + + } + + } + + function renderInstances( geometry ) { + + 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; + + } + + var index = geometry.attributes.index; + + extension.drawElementsInstancedANGLE( mode, index.array.length, type, 0, geometry.maxInstancedCount ); + + } + + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderGroups = renderGroups; + this.renderInstances = renderInstances; + +}; diff --git a/utils/build/includes/common.json b/utils/build/includes/common.json index 11c95fc24b3e1c0f8360e161146d1bb3caf990fe..e4c09d01d3281c29cf314ec7ba2362b298bfd536 100644 --- a/utils/build/includes/common.json +++ b/utils/build/includes/common.json @@ -158,6 +158,7 @@ "src/renderers/WebGLRenderTarget.js", "src/renderers/WebGLRenderTargetCube.js", "src/renderers/webgl/WebGLBufferRenderer.js", + "src/renderers/webgl/WebGLIndexedBufferRenderer.js", "src/renderers/webgl/WebGLExtensions.js", "src/renderers/webgl/WebGLGeometries.js", "src/renderers/webgl/WebGLObjects.js",