WebGLIndexedBufferRenderer.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
  5. var mode;
  6. function setMode( value ) {
  7. mode = value;
  8. }
  9. var type, bytesPerElement;
  10. function setIndex( value ) {
  11. type = value.type;
  12. bytesPerElement = value.bytesPerElement;
  13. }
  14. function render( start, count ) {
  15. gl.drawElements( mode, count, type, start * bytesPerElement );
  16. info.update( count, mode );
  17. }
  18. function renderInstances( geometry, start, count ) {
  19. var extension, methodName;
  20. if ( capabilities.isWebGL2 ) {
  21. extension = gl;
  22. methodName = 'drawElementsInstanced';
  23. } else {
  24. extension = extensions.get( 'ANGLE_instanced_arrays' );
  25. methodName = 'drawElementsInstancedANGLE';
  26. if ( extension === null ) {
  27. console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
  28. return;
  29. }
  30. }
  31. extension[ methodName ]( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );
  32. info.update( count, mode, geometry.maxInstancedCount );
  33. }
  34. //
  35. this.setMode = setMode;
  36. this.setIndex = setIndex;
  37. this.render = render;
  38. this.renderInstances = renderInstances;
  39. }
  40. export { WebGLIndexedBufferRenderer };