Ver Fonte

WebGLRenderer: Added BufferGeometry deallocation as per @MiiBond suggestion in fa8f4878c8e334fa3dafe4dd91295dec4292fc65.

Mr.doob há 12 anos atrás
pai
commit
c7d656eadb
1 ficheiros alterados com 32 adições e 14 exclusões
  1. 32 14
      src/renderers/WebGLRenderer.js

+ 32 - 14
src/renderers/WebGLRenderer.js

@@ -592,39 +592,57 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		geometry.__webglInit = undefined;
 
-		if ( geometry.geometryGroups !== undefined ) {
+		if ( geometry instanceof THREE.BufferGeometry ) {
+
+			var attributes = geometry.attributes;
+
+			for ( var key in attributes ) {
+
+				if ( attributes[ key ].buffer !== undefined ) {
+
+					_gl.deleteBuffer( attributes[ key ].buffer );
+		
+				}
+
+			}
+
+		} else {
 
-			for ( var g in geometry.geometryGroups ) {
+			if ( geometry.geometryGroups !== undefined ) {
 
-				var geometryGroup = geometry.geometryGroups[ g ];
+				for ( var g in geometry.geometryGroups ) {
 
-				if ( geometryGroup.numMorphTargets !== undefined ) {
+					var geometryGroup = geometry.geometryGroups[ g ];
 
-					for ( var m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {
+					if ( geometryGroup.numMorphTargets !== undefined ) {
 
-						_gl.deleteBuffer( geometryGroup.__webglMorphTargetsBuffers[ m ] );
+						for ( var m = 0, ml = geometryGroup.numMorphTargets; m < ml; m ++ ) {
+
+							_gl.deleteBuffer( geometryGroup.__webglMorphTargetsBuffers[ m ] );
+
+						}
 
 					}
 
-				}
+					if ( geometryGroup.numMorphNormals !== undefined ) {
 
-				if ( geometryGroup.numMorphNormals !== undefined ) {
+						for ( var m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {
 
-					for ( var m = 0, ml = geometryGroup.numMorphNormals; m < ml; m ++ ) {
+							_gl.deleteBuffer( geometryGroup.__webglMorphNormalsBuffers[ m ] );
 
-						_gl.deleteBuffer( geometryGroup.__webglMorphNormalsBuffers[ m ] );
+						}
 
 					}
 
-				}
+					deleteBuffers( geometryGroup );
 
-				deleteBuffers( geometryGroup );
+				}
 
 			}
 
-		}
+			deleteBuffers( geometry );
 
-		deleteBuffers( geometry );
+		}
 
 	};