Browse Source

fix an issue wher buffers don't get deleted

gero3 10 years ago
parent
commit
1c568ed1f5
2 changed files with 31 additions and 6 deletions
  1. 30 5
      src/renderers/webgl/WebGLGeometries.js
  2. 1 1
      src/renderers/webgl/WebGLObjects.js

+ 30 - 5
src/renderers/webgl/WebGLGeometries.js

@@ -2,7 +2,7 @@
 * @author mrdoob / http://mrdoob.com/
 */
 
-THREE.WebGLGeometries = function ( gl, info ) {
+THREE.WebGLGeometries = function ( gl,properties, info ) {
 
 	var geometries = {};
 
@@ -48,12 +48,12 @@ THREE.WebGLGeometries = function ( gl, info ) {
 		for ( var name in buffergeometry.attributes ) {
 
 			var attribute = buffergeometry.attributes[ name ];
+			var buffer = getAttributeBuffer(attribute);
 
-			if ( attribute.buffer !== undefined ) {
+			if ( buffer !== undefined ) {
 
-				gl.deleteBuffer( attribute.buffer );
-
-				delete attribute.buffer;
+				gl.deleteBuffer( buffer );
+				removeAttributeBuffer(attribute);
 
 			}
 
@@ -66,5 +66,30 @@ THREE.WebGLGeometries = function ( gl, info ) {
 		info.memory.geometries --;
 
 	}
+	
+	 function getAttributeBuffer( attribute ) {
+
+		if ( attribute instanceof THREE.InterleavedBufferAttribute ) {
 
+			return properties.get( attribute.data ).__webglBuffer;
+
+		}
+
+		return properties.get( attribute ).__webglBuffer;
+
+	};
+	
+	 function removeAttributeBuffer( attribute ) {
+
+		if ( attribute instanceof THREE.InterleavedBufferAttribute ) {
+
+			properties.delete( attribute.data );
+
+		} else {
+
+			properties.delete( attribute );
+			
+		};
+
+	};
 };

+ 1 - 1
src/renderers/webgl/WebGLObjects.js

@@ -8,7 +8,7 @@ THREE.WebGLObjects = function ( gl, properties, info ) {
 
 	var morphInfluences = new Float32Array( 8 );
 
-	var geometries = new THREE.WebGLGeometries( gl, info );
+	var geometries = new THREE.WebGLGeometries( gl, properties, info );
 
 	//