浏览代码

WebGLRenderer: More buffer deletion.

Mr.doob 10 年之前
父节点
当前提交
bbfa1d07af
共有 1 个文件被更改,包括 24 次插入9 次删除
  1. 24 9
      src/renderers/WebGLRenderer.js

+ 24 - 9
src/renderers/WebGLRenderer.js

@@ -624,6 +624,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			if ( geometry[ name ] !== undefined ) {
 
 				_gl.deleteBuffer( geometry[ name ] );
+
 				delete geometry[ name ];
 
 			}
@@ -661,6 +662,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 				if ( attribute.buffer !== undefined ) {
 
 					_gl.deleteBuffer( attribute.buffer );
+
 					delete attribute.buffer;
 
 				}
@@ -685,6 +687,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 						}
 
+						delete geometryGroup.__webglMorphTargetsBuffers;
+
 					}
 
 					if ( geometryGroup.numMorphNormals !== undefined ) {
@@ -695,6 +699,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 						}
 
+						delete geometryGroup.__webglMorphNormalsBuffers;
+
 					}
 
 					deleteBuffers( geometryGroup );
@@ -723,25 +729,31 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			_gl.deleteTexture( texture.image.__webglTextureCube );
 
+			delete texture.image.__webglTextureCube;
+
 		} else {
 
 			// 2D texture
 
-			if ( ! texture.__webglInit ) return;
+			if ( texture.__webglInit === undefined ) return;
 
-			texture.__webglInit = false;
 			_gl.deleteTexture( texture.__webglTexture );
 
+			delete texture.__webglTexture;
+			delete texture.__webglInit;
+
 		}
 
 	};
 
 	var deallocateRenderTarget = function ( renderTarget ) {
 
-		if ( ! renderTarget || ! renderTarget.__webglTexture ) return;
+		if ( ! renderTarget || renderTarget.__webglTexture === undefined ) return;
 
 		_gl.deleteTexture( renderTarget.__webglTexture );
 
+		delete renderTarget.__webglTexture;
+
 		if ( renderTarget instanceof THREE.WebGLRenderTargetCube ) {
 
 			for ( var i = 0; i < 6; i ++ ) {
@@ -758,6 +770,9 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
+		delete renderTarget.__webglFramebuffer;
+		delete renderTarget.__webglRenderbuffer;
+
 	};
 
 	var deallocateMaterial = function ( material ) {
@@ -5573,7 +5588,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	this.uploadTexture = function ( texture ) {
 
-		if ( ! texture.__webglInit ) {
+		if ( texture.__webglInit === undefined ) {
 
 			texture.__webglInit = true;
 
@@ -5838,14 +5853,14 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
-	};
+	}
 
 	function setCubeTextureDynamic ( texture, slot ) {
 
 		_gl.activeTexture( _gl.TEXTURE0 + slot );
 		_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, texture.__webglTexture );
 
-	};
+	}
 
 	// Render targets
 
@@ -5854,7 +5869,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 		_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
 		_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureTarget, renderTarget.__webglTexture, 0 );
 
-	};
+	}
 
 	function setupRenderBuffer ( renderbuffer, renderTarget  ) {
 
@@ -5882,13 +5897,13 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
-	};
+	}
 
 	this.setRenderTarget = function ( renderTarget ) {
 
 		var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );
 
-		if ( renderTarget && ! renderTarget.__webglFramebuffer ) {
+		if ( renderTarget && renderTarget.__webglFramebuffer === undefined ) {
 
 			if ( renderTarget.depthBuffer === undefined ) renderTarget.depthBuffer = true;
 			if ( renderTarget.stencilBuffer === undefined ) renderTarget.stencilBuffer = true;