|
@@ -48,43 +48,42 @@ function reversePainterSortStable( a, b ) {
|
|
|
|
|
|
function WebGLRenderList() {
|
|
function WebGLRenderList() {
|
|
|
|
|
|
- var opaque = [];
|
|
|
|
- var opaqueLastIndex = - 1;
|
|
|
|
|
|
+ var renderItems = [];
|
|
|
|
+ var renderItemsIndex = 0;
|
|
|
|
|
|
|
|
+ var opaque = [];
|
|
var transparent = [];
|
|
var transparent = [];
|
|
- var transparentLastIndex = - 1;
|
|
|
|
|
|
|
|
function init() {
|
|
function init() {
|
|
|
|
|
|
- opaqueLastIndex = - 1;
|
|
|
|
- transparentLastIndex = - 1;
|
|
|
|
|
|
+ renderItemsIndex = 0;
|
|
|
|
+
|
|
|
|
+ opaque.length = 0;
|
|
|
|
+ transparent.length = 0;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
function push( object, geometry, material, z, group ) {
|
|
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 {
|
|
} else {
|
|
|
|
|
|
- array = opaque;
|
|
|
|
- index = ++ opaqueLastIndex;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // recycle existing render item or grow the array
|
|
|
|
-
|
|
|
|
- var renderItem = array[ index ];
|
|
|
|
-
|
|
|
|
- if ( renderItem ) {
|
|
|
|
-
|
|
|
|
renderItem.id = object.id;
|
|
renderItem.id = object.id;
|
|
renderItem.object = object;
|
|
renderItem.object = object;
|
|
renderItem.geometry = geometry;
|
|
renderItem.geometry = geometry;
|
|
@@ -94,30 +93,11 @@ function WebGLRenderList() {
|
|
renderItem.z = z;
|
|
renderItem.z = z;
|
|
renderItem.group = group;
|
|
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,
|
|
init: init,
|
|
push: push,
|
|
push: push,
|
|
- finish: finish,
|
|
|
|
|
|
|
|
sort: sort
|
|
sort: sort
|
|
};
|
|
};
|