Explorar o código

fix: Fix leak of morph targets (#26040)

Buffers of morph targets leaked even if I call `geometry.dispose()`

Fixed by WebGLGeometries.js side, I believe this is the most appropriate way to fix this

See: https://github.com/mrdoob/three.js/issues/26028
Demo of the Issue: https://glitch.com/edit/#!/three-r152-morph-leaks
0b5vr %!s(int64=2) %!d(string=hai) anos
pai
achega
5f5f5a2d7c
Modificáronse 1 ficheiros con 12 adicións e 0 borrados
  1. 12 0
      src/renderers/webgl/WebGLGeometries.js

+ 12 - 0
src/renderers/webgl/WebGLGeometries.js

@@ -22,6 +22,18 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
 
 
 		}
 		}
 
 
+		for ( const name in geometry.morphAttributes ) {
+
+			const array = geometry.morphAttributes[ name ];
+
+			for ( let i = 0, l = array.length; i < l; i ++ ) {
+
+				attributes.remove( array[ i ] );
+
+			}
+
+		}
+
 		geometry.removeEventListener( 'dispose', onGeometryDispose );
 		geometry.removeEventListener( 'dispose', onGeometryDispose );
 
 
 		delete geometries[ geometry.id ];
 		delete geometries[ geometry.id ];