提交 0033a975 编写于 作者: A alteredq

Fixed bug preventing re-adding of objects removed from the scene.

Problem was that objects could be added to WebGLRenderer's internal render list only once (because of `webglInit` flag).

Now there are two separate internal states (`webglInit` and `webglActive`) so that object can be initialized just once (expensive operation) but added / removed from the scene many times (cheap operation).
上级 1d509720
因为 它太大了无法显示 source diff 。你可以改为 查看blob
此差异已折叠。
......@@ -130,6 +130,7 @@ THREE.Object3D.prototype = {
},
remove: function ( object ) {
var scene = this;
var childIndex = this.children.indexOf( object );
......@@ -161,7 +162,7 @@ THREE.Object3D.prototype = {
var c, cl, child, recurseResult;
for ( c = 0, cl = this.children.length; c < cl; c++ ) {
for ( c = 0, cl = this.children.length; c < cl; c ++ ) {
child = this.children[ c ];
......
......@@ -4114,7 +4114,6 @@ THREE.WebGLRenderer = function ( parameters ) {
object.matrixWorld.flattenToArray( object._objectMatrixArray );
if ( object instanceof THREE.Mesh ) {
geometry = object.geometry;
......@@ -4148,8 +4147,6 @@ THREE.WebGLRenderer = function ( parameters ) {
}
addBuffer( scene.__webglObjects, geometryGroup, object );
}
} else if ( object instanceof THREE.Ribbon ) {
......@@ -4166,8 +4163,6 @@ THREE.WebGLRenderer = function ( parameters ) {
}
addBuffer( scene.__webglObjects, geometry, object );
} else if ( object instanceof THREE.Line ) {
geometry = object.geometry;
......@@ -4182,8 +4177,6 @@ THREE.WebGLRenderer = function ( parameters ) {
}
addBuffer( scene.__webglObjects, geometry, object );
} else if ( object instanceof THREE.ParticleSystem ) {
geometry = object.geometry;
......@@ -4198,6 +4191,29 @@ THREE.WebGLRenderer = function ( parameters ) {
}
}
}
if ( ! object.__webglActive ) {
if ( object instanceof THREE.Mesh ) {
geometry = object.geometry;
for ( g in geometry.geometryGroups ) {
geometryGroup = geometry.geometryGroups[ g ];
addBuffer( scene.__webglObjects, geometryGroup, object );
}
} else if ( object instanceof THREE.Ribbon ||
object instanceof THREE.Line ||
object instanceof THREE.ParticleSystem ) {
geometry = object.geometry;
addBuffer( scene.__webglObjects, geometry, object );
} else if ( THREE.MarchingCubes !== undefined && object instanceof THREE.MarchingCubes ) {
......@@ -4210,9 +4226,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
/*else if ( object instanceof THREE.Particle ) {
}*/
object.__webglActive = true;
}
......@@ -4351,9 +4365,8 @@ THREE.WebGLRenderer = function ( parameters ) {
// it updates itself in render callback
} else if ( object instanceof THREE.Particle ) {
}*/
}
*/
/*
delete geometry.vertices;
......@@ -4414,6 +4427,8 @@ THREE.WebGLRenderer = function ( parameters ) {
}
object.__webglActive = false;
};
function sortFacesByMaterial( geometry ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册