瀏覽代碼

Updated builds.

Mr.doob 10 年之前
父節點
當前提交
0e48e6247d
共有 2 個文件被更改,包括 46 次插入4 次删除
  1. 43 2
      build/three.js
  2. 3 2
      build/three.min.js

+ 43 - 2
build/three.js

@@ -23531,7 +23531,7 @@ THREE.WebGLExtensions = function ( gl ) {
 * @author mrdoob / http://mrdoob.com/
 */
 
-THREE.WebGLGeometries = function ( gl, info ) {
+THREE.WebGLGeometries = function ( gl, properties, info ) {
 
 	var geometries = {};
 
@@ -23572,6 +23572,21 @@ THREE.WebGLGeometries = function ( gl, info ) {
 	function onGeometryDispose( event ) {
 
 		var geometry = event.target;
+		var buffergeometry = geometries[ geometry.id ];
+
+		for ( var name in buffergeometry.attributes ) {
+
+			var attribute = buffergeometry.attributes[ name ];
+			var buffer = getAttributeBuffer( attribute );
+
+			if ( buffer !== undefined ) {
+
+				gl.deleteBuffer( buffer );
+				removeAttributeBuffer( attribute );
+
+			}
+
+		}
 
 		geometry.removeEventListener( 'dispose', onGeometryDispose );
 
@@ -23581,6 +23596,32 @@ THREE.WebGLGeometries = function ( gl, info ) {
 
 	}
 
+	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 );
+
+		}
+
+	}
+
 };
 
 // File:src/renderers/webgl/WebGLObjects.js
@@ -23595,7 +23636,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 );
 
 	//
 

+ 3 - 2
build/three.min.js

@@ -586,8 +586,9 @@ THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:f
 this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;a.shareDepthFrom=this.shareDepthFrom;return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;
 THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");
 break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};
-THREE.WebGLGeometries=function(a,b){function c(a){a=a.target;a.removeEventListener("dispose",c);delete d[a.id];b.memory.geometries--}var d={};this.get=function(a){var g=a.geometry;if(void 0!==d[g.id])return d[g.id];g.addEventListener("dispose",c);g instanceof THREE.BufferGeometry?d[g.id]=g:g instanceof THREE.Geometry&&(void 0===a._bufferGeometry&&(a._bufferGeometry=(new THREE.BufferGeometry).setFromObject(a)),d[g.id]=a._bufferGeometry);b.memory.geometries++;return d[g.id]}};
-THREE.WebGLObjects=function(a,b,c){function d(a){a.target.traverse(function(a){a.removeEventListener("remove",d);(a instanceof THREE.Mesh||a instanceof THREE.PointCloud||a instanceof THREE.Line)&&delete g[a.id];delete a._modelViewMatrix;delete a._normalMatrix;b.delete(a)})}function e(a,b){return b[0]-a[0]}var g={},f=new Float32Array(8),h=new THREE.WebGLGeometries(a,c);this.objects=g;this.geometries=h;this.init=function(a){var c=b.get(a);void 0===c.__webglInit&&(c.__webglInit=!0,a._modelViewMatrix=
+THREE.WebGLGeometries=function(a,b,c){function d(g){g=g.target;var f=e[g.id],h;for(h in f.attributes){var k=f.attributes[h],l;l=k;l=l instanceof THREE.InterleavedBufferAttribute?b.get(l.data).__webglBuffer:b.get(l).__webglBuffer;void 0!==l&&(a.deleteBuffer(l),k instanceof THREE.InterleavedBufferAttribute?b.delete(k.data):b.delete(k))}g.removeEventListener("dispose",d);delete e[g.id];c.memory.geometries--}var e={};this.get=function(a){var b=a.geometry;if(void 0!==e[b.id])return e[b.id];b.addEventListener("dispose",
+d);b instanceof THREE.BufferGeometry?e[b.id]=b:b instanceof THREE.Geometry&&(void 0===a._bufferGeometry&&(a._bufferGeometry=(new THREE.BufferGeometry).setFromObject(a)),e[b.id]=a._bufferGeometry);c.memory.geometries++;return e[b.id]}};
+THREE.WebGLObjects=function(a,b,c){function d(a){a.target.traverse(function(a){a.removeEventListener("remove",d);(a instanceof THREE.Mesh||a instanceof THREE.PointCloud||a instanceof THREE.Line)&&delete g[a.id];delete a._modelViewMatrix;delete a._normalMatrix;b.delete(a)})}function e(a,b){return b[0]-a[0]}var g={},f=new Float32Array(8),h=new THREE.WebGLGeometries(a,b,c);this.objects=g;this.geometries=h;this.init=function(a){var c=b.get(a);void 0===c.__webglInit&&(c.__webglInit=!0,a._modelViewMatrix=
 new THREE.Matrix4,a._normalMatrix=new THREE.Matrix3,a.addEventListener("removed",d));void 0===c.__webglActive&&(c.__webglActive=!0,a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.PointCloud)&&(g[a.id]={id:a.id,object:a,z:0})};this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.update=function(c){for(var d=0,g=c.length;d<g;d++){var p=c[d].object;if(!1!==p.material.visible){var m=p,p=h.get(m);
 m.geometry instanceof THREE.Geometry&&p.updateFromObject(m);if(void 0!==m.morphTargetInfluences){for(var q=[],r=m.morphTargetInfluences,s=0,u=r.length;s<u;s++)q.push([r[s],s]);q.sort(e);8<q.length&&(q.length=8);s=0;for(u=q.length;s<u;s++)f[s]=q[s][0],p.addAttribute("morphTarget"+s,p.morphAttributes[q[s][1]]);m=m.material;void 0!==m.program?(m=m.program.getUniforms(),null!==m.morphTargetInfluences&&a.uniform1fv(m.morphTargetInfluences,f)):console.warn("TOFIX: material.program is undefined")}p=p.attributes;
 m=void 0;for(m in p)if(r=p[m],q="index"===m?a.ELEMENT_ARRAY_BUFFER:a.ARRAY_BUFFER,r=r instanceof THREE.InterleavedBufferAttribute?r.data:r,s=b.get(r),void 0===s.__webglBuffer){s.__webglBuffer=a.createBuffer();a.bindBuffer(q,s.__webglBuffer);u=a.STATIC_DRAW;if(r instanceof THREE.DynamicBufferAttribute||r instanceof THREE.InstancedBufferAttribute&&!0===r.dynamic||r instanceof THREE.InterleavedBuffer&&!0===r.dynamic)u=a.DYNAMIC_DRAW;a.bufferData(q,r.array,u);s.version=r.version}else s.version!==r.version&&