WebGLIndexedBufferRenderer.js 1.3 KB

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