提交 572306c6 编写于 作者: T tschw

Renderer: Improved render items memory management.

上级 26f31198
......@@ -35,13 +35,18 @@ THREE.WebGLRenderer = function ( parameters ) {
var lights = [];
var opaqueObjects = [];
var opaqueObjectsLastIndex = -1;
var transparentObjects = [];
var transparentObjectsLastIndex = -1;
var opaqueImmediateObjects = [];
var opaqueImmediateObjectsLastIndex = -1;
var transparentImmediateObjects = [];
var transparentImmediateObjectsLastIndex = -1;
var morphInfluences = new Float32Array( 8 );
var sprites = [];
var lensFlares = [];
......@@ -623,7 +628,7 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( newReferenceCount === 0 ) {
// the last meterial that has been using the program let
// the last material that has been using the program let
// go of it, so remove it from the (unordered) _programs
// set and deallocate the GL resource
......@@ -1146,17 +1151,23 @@ THREE.WebGLRenderer = function ( parameters ) {
lights.length = 0;
opaqueObjects.length = 0;
transparentObjects.length = 0;
opaqueObjectsLastIndex = -1;
transparentObjectsLastIndex = -1;
opaqueImmediateObjects.length = 0;
transparentImmediateObjects.length = 0;
opaqueImmediateObjectsLastIndex = -1;
transparentImmediateObjectsLastIndex = -1;
sprites.length = 0;
lensFlares.length = 0;
projectObject( scene );
opaqueObjects.length = opaqueObjectsLastIndex + 1;
transparentObjects.length = transparentObjectsLastIndex + 1;
opaqueImmediateObjects.length = opaqueImmediateObjectsLastIndex + 1;
transparentImmediateObjects.length = transparentImmediateObjectsLastIndex + 1;
if ( _this.sortObjects === true ) {
opaqueObjects.sort( painterSortStable );
......@@ -1236,36 +1247,74 @@ THREE.WebGLRenderer = function ( parameters ) {
function pushImmediateRenderItem( object ) {
var array, index;
if ( object.material.transparent ) {
transparentImmediateObjects.push( object );
array = transparentImmediateObjects;
index = ++ transparentImmediateObjectsLastIndex;
} else {
array = opaqueImmediateObjects;
index = ++ opaqueImmediateObjectsLastIndex;
}
if ( index < array.length ) {
array[ index ] = object;
} else {
opaqueImmediateObjects.push( object );
// assert( index === array.length );
array.push( object );
}
}
function pushRenderItem( object, geometry, material, z, group ) {
var renderItem = {
id: object.id,
object: object,
geometry: geometry,
material: material,
z: _vector3.z,
group: group
};
var array, index;
if ( material.transparent ) {
transparentObjects.push( renderItem );
array = transparentObjects;
index = ++ transparentObjectsLastIndex;
} else {
opaqueObjects.push( renderItem );
array = opaqueObjects;
index = ++ opaqueObjectsLastIndex;
}
var renderItem = array[ index ];
if ( renderItem !== undefined ) {
renderItem.id = object.id;
renderItem.object = object;
renderItem.geometry = geometry;
renderItem.material = material;
renderItem.z = _vector3.z;
renderItem.group = group;
} else {
renderItem = {
id: object.id,
object: object,
geometry: geometry,
material: material,
z: _vector3.z,
group: group
};
// assert( index === array.length );
array.push( renderItem );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册