WebGLIndexedBufferRenderer.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. THREE.WebGLIndexedBufferRenderer = function ( _gl, extensions, _infoRender ) {
  5. var mode;
  6. function setMode( value ) {
  7. mode = value;
  8. }
  9. var type, size;
  10. function setIndex( index ) {
  11. if ( index.array instanceof Uint32Array && extensions.get( 'OES_element_index_uint' ) ) {
  12. type = _gl.UNSIGNED_INT;
  13. size = 4;
  14. } else {
  15. type = _gl.UNSIGNED_SHORT;
  16. size = 2;
  17. }
  18. }
  19. function render( start, count ) {
  20. _gl.drawElements( mode, count, type, start * size );
  21. _infoRender.calls ++;
  22. _infoRender.vertices += count;
  23. if ( mode === _gl.TRIANGLES ) _infoRender.faces += count / 3;
  24. }
  25. function renderInstances( geometry, start, count ) {
  26. var extension = extensions.get( 'ANGLE_instanced_arrays' );
  27. if ( extension === null ) {
  28. console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
  29. return;
  30. }
  31. var index = geometry.index;
  32. extension.drawElementsInstancedANGLE( mode, count, type, start * size, geometry.maxInstancedCount );
  33. }
  34. this.setMode = setMode;
  35. this.setIndex = setIndex;
  36. this.render = render;
  37. this.renderInstances = renderInstances;
  38. };