Pārlūkot izejas kodu

Refactored WebGLRenderLists.

Mr.doob 8 gadi atpakaļ
vecāks
revīzija
8e12491985
2 mainītis faili ar 22 papildinājumiem un 45 dzēšanām
  1. 0 2
      src/renderers/WebGLRenderer.js
  2. 22 43
      src/renderers/webgl/WebGLRenderLists.js

+ 0 - 2
src/renderers/WebGLRenderer.js

@@ -1153,8 +1153,6 @@ function WebGLRenderer( parameters ) {
 
 		projectObject( scene, camera, _this.sortObjects );
 
-		currentRenderList.finish();
-
 		if ( _this.sortObjects === true ) {
 
 			currentRenderList.sort();

+ 22 - 43
src/renderers/webgl/WebGLRenderLists.js

@@ -48,43 +48,42 @@ function reversePainterSortStable( a, b ) {
 
 function WebGLRenderList() {
 
-	var opaque = [];
-	var opaqueLastIndex = - 1;
+	var renderItems = [];
+	var renderItemsIndex = 0;
 
+	var opaque = [];
 	var transparent = [];
-	var transparentLastIndex = - 1;
 
 	function init() {
 
-		opaqueLastIndex = - 1;
-		transparentLastIndex = - 1;
+		renderItemsIndex = 0;
+
+		opaque.length = 0;
+		transparent.length = 0;
 
 	}
 
 	function push( object, geometry, material, z, group ) {
 
-		var array, index;
+		var renderItem = renderItems[ renderItemsIndex ];
 
-		// allocate the next position in the appropriate array
+		if ( renderItem === undefined ) {
 
-		if ( material.transparent ) {
+			renderItem = {
+				id: object.id,
+				object: object,
+				geometry: geometry,
+				material: material,
+				program: material.program,
+				renderOrder: object.renderOrder,
+				z: z,
+				group: group
+			};
 
-			array = transparent;
-			index = ++ transparentLastIndex;
+			renderItems[ renderItemsIndex ] = renderItem;
 
 		} else {
 
-			array = opaque;
-			index = ++ opaqueLastIndex;
-
-		}
-
-		// recycle existing render item or grow the array
-
-		var renderItem = array[ index ];
-
-		if ( renderItem ) {
-
 			renderItem.id = object.id;
 			renderItem.object = object;
 			renderItem.geometry = geometry;
@@ -94,30 +93,11 @@ function WebGLRenderList() {
 			renderItem.z = z;
 			renderItem.group = group;
 
-		} else {
-
-			renderItem = {
-				id: object.id,
-				object: object,
-				geometry: geometry,
-				material: material,
-				program: material.program,
-				renderOrder: object.renderOrder,
-				z: z,
-				group: group
-			};
-
-			// assert( index === array.length );
-			array.push( renderItem );
-
 		}
 
-	}
-
-	function finish() {
+		( material.transparent === true ? transparent : opaque ).push( renderItem );
 
-		opaque.length = opaqueLastIndex + 1;
-		transparent.length = transparentLastIndex + 1;
+		renderItemsIndex ++;
 
 	}
 
@@ -134,7 +114,6 @@ function WebGLRenderList() {
 
 		init: init,
 		push: push,
-		finish: finish,
 
 		sort: sort
 	};