From 1c568ed1f547b94b2aa5315ec24a91ec34fe5e13 Mon Sep 17 00:00:00 2001 From: gero3 Date: Thu, 16 Jul 2015 21:19:12 +0000 Subject: [PATCH] fix an issue wher buffers don't get deleted --- src/renderers/webgl/WebGLGeometries.js | 35 ++++++++++++++++++++++---- src/renderers/webgl/WebGLObjects.js | 2 +- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/renderers/webgl/WebGLGeometries.js b/src/renderers/webgl/WebGLGeometries.js index 91434651da..bc4861a4fe 100644 --- a/src/renderers/webgl/WebGLGeometries.js +++ b/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 ); + + }; + + }; }; diff --git a/src/renderers/webgl/WebGLObjects.js b/src/renderers/webgl/WebGLObjects.js index 168cf038e1..8781ebb65b 100644 --- a/src/renderers/webgl/WebGLObjects.js +++ b/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 ); // -- GitLab