Browse Source

WebGLRenderer: Tweaked drawRange/groups handling. As per @WestLangley suggestion in 068939194e840800e93d993474d5c75bc0f61337.

Mr.doob 9 years ago
parent
commit
b8fa3944c4
1 changed files with 21 additions and 8 deletions
  1. 21 8
      src/renderers/WebGLRenderer.js

+ 21 - 8
src/renderers/WebGLRenderer.js

@@ -811,22 +811,35 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
-		var drawStart = geometry.drawRange.start;
-		var drawCount = geometry.drawRange.count;
+		//
 
-		if ( drawCount === Infinity ) {
+		var dataStart = 0;
+		var dataCount = Infinity;
 
-			drawCount = index !== null ? index.count : position.count;
+		if ( index !== null ) {
 
-		}
+			dataCount = index.count
 
-		if ( group !== null ) {
+		} else if ( position !== undefined ) {
 
-			drawStart = Math.max( drawStart, group.start );
-			drawCount = Math.min( drawCount, group.count );
+			dataCount = position.count;
 
 		}
 
+		var rangeStart = geometry.drawRange.start;
+		var rangeCount = geometry.drawRange.count;
+
+		var groupStart = group !== null ? group.start : 0;
+		var groupCount = group !== null ? group.count : Infinity;
+
+		var drawStart = Math.max( dataStart, rangeStart, groupStart );
+
+		var drawEnd = Math.min( dataStart + dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;
+
+		var drawCount = drawEnd - drawStart + 1;
+
+		//
+
 		if ( object instanceof THREE.Mesh ) {
 
 			if ( material.wireframe === true ) {