|
@@ -66,6 +66,41 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ function renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
|
|
|
+
|
|
|
+ if ( drawCount === 0 ) return;
|
|
|
+
|
|
|
+ const extension = extensions.get( 'WEBGL_multi_draw' );
|
|
|
+
|
|
|
+ if ( extension === null ) {
|
|
|
+
|
|
|
+ for ( let i = 0; i < starts.length; i ++ ) {
|
|
|
+
|
|
|
+ renderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ extension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );
|
|
|
+
|
|
|
+ let elementCount = 0;
|
|
|
+ for ( let i = 0; i < drawCount; i ++ ) {
|
|
|
+
|
|
|
+ elementCount += counts[ i ];
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ for ( let i = 0; i < primcount.length; i ++ ) {
|
|
|
+
|
|
|
+ info.update( elementCount, mode, primcount[ i ] );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
//
|
|
|
|
|
|
this.setMode = setMode;
|
|
@@ -73,6 +108,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
|
|
|
this.render = render;
|
|
|
this.renderInstances = renderInstances;
|
|
|
this.renderMultiDraw = renderMultiDraw;
|
|
|
+ this.renderMultiDrawInstances = renderMultiDrawInstances;
|
|
|
|
|
|
}
|
|
|
|