浏览代码

BatchedMesh: Add fallback when the function extension is not supported (#27178)

Garrett Johnson 1 年之前
父节点
当前提交
f02b9485ed
共有 2 个文件被更改,包括 28 次插入18 次删除
  1. 14 9
      src/renderers/webgl/WebGLBufferRenderer.js
  2. 14 9
      src/renderers/webgl/WebGLIndexedBufferRenderer.js

+ 14 - 9
src/renderers/webgl/WebGLBufferRenderer.js

@@ -56,21 +56,26 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
 		const extension = extensions.get( 'WEBGL_multi_draw' );
 		const extension = extensions.get( 'WEBGL_multi_draw' );
 		if ( extension === null ) {
 		if ( extension === null ) {
 
 
-			console.error( 'THREE.WebGLBufferRenderer: using THREE.BatchedMesh but hardware does not support extension WEBGL_multi_draw.' );
-			return;
+			for ( let i = 0; i < drawCount; i ++ ) {
 
 
-		}
+				this.render( starts[ i ], counts[ i ] );
 
 
-		extension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );
+			}
 
 
-		let elementCount = 0;
-		for ( let i = 0; i < drawCount; i ++ ) {
+		} else {
 
 
-			elementCount += counts[ i ];
+			extension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );
 
 
-		}
+			let elementCount = 0;
+			for ( let i = 0; i < drawCount; i ++ ) {
+
+				elementCount += counts[ i ];
 
 
-		info.update( elementCount, mode, 1 );
+			}
+
+			info.update( elementCount, mode, 1 );
+
+		}
 
 
 	}
 	}
 
 

+ 14 - 9
src/renderers/webgl/WebGLIndexedBufferRenderer.js

@@ -65,21 +65,26 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
 		const extension = extensions.get( 'WEBGL_multi_draw' );
 		const extension = extensions.get( 'WEBGL_multi_draw' );
 		if ( extension === null ) {
 		if ( extension === null ) {
 
 
-			console.error( 'THREE.WebGLBufferRenderer: using THREE.BatchedMesh but hardware does not support extension WEBGL_multi_draw.' );
-			return;
+			for ( let i = 0; i < drawCount; i ++ ) {
 
 
-		}
+				this.render( starts[ i ] / bytesPerElement, counts[ i ] );
 
 
-		extension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );
+			}
 
 
-		let elementCount = 0;
-		for ( let i = 0; i < drawCount; i ++ ) {
+		} else {
 
 
-			elementCount += counts[ i ];
+			extension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );
 
 
-		}
+			let elementCount = 0;
+			for ( let i = 0; i < drawCount; i ++ ) {
+
+				elementCount += counts[ i ];
 
 
-		info.update( elementCount, mode, 1 );
+			}
+
+			info.update( elementCount, mode, 1 );
+
+		}
 
 
 	}
 	}