diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index e028fd2e5507ecc038d75e68c5bc21a41eda51bb..7cb4ce7a0d9544e1f06e6d4e0548979d360e3adc 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -2779,8 +2779,52 @@ THREE.WebGLRenderer = function ( parameters ) { var position = geometry.attributes.position; // render particles + + if ( geometry.attributes.index !== undefined ) { + + var indices = geometry.attributes.index; + + var type; + var size; + + if ( indices.array instanceof Uint16Array ) { + + type = _gl.UNSIGNED_SHORT; + size = 2; + + } else { + + console.error( "unsupported index data type" ); + return; + + } + + _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, indices.buffer ); + + if ( geometry.offsets.length > 0 ) { + + for ( var i = 0; i < geometry.offsets.length; i++ ) { + + var offset = geometry.offsets[ i ]; + + _gl.drawElements( _gl.POINTS, offset.count, type, offset.start * size ); + + + } + + } else { + + _gl.drawElements( _gl.POINTS, indices.length, type, 0); + + } + + } else { + + _gl.drawArrays( _gl.POINTS, 0, position.array.length / 3 ); + + } - _gl.drawArrays( _gl.POINTS, 0, position.array.length / 3 ); + _this.info.render.calls ++; _this.info.render.points += position.array.length / 3;