|
@@ -3,40 +3,39 @@ import { arrayMax } from '../../utils.js';
|
|
|
|
|
|
function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
|
|
|
- const geometries = new WeakMap();
|
|
|
|
|
|
+ const geometries = {};
|
|
const wireframeAttributes = new WeakMap();
|
|
const wireframeAttributes = new WeakMap();
|
|
|
|
|
|
function onGeometryDispose( event ) {
|
|
function onGeometryDispose( event ) {
|
|
|
|
|
|
const geometry = event.target;
|
|
const geometry = event.target;
|
|
- const buffergeometry = geometries.get( geometry );
|
|
|
|
|
|
|
|
- if ( buffergeometry.index !== null ) {
|
|
|
|
|
|
+ if ( geometry.index !== null ) {
|
|
|
|
|
|
- attributes.remove( buffergeometry.index );
|
|
|
|
|
|
+ attributes.remove( geometry.index );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- for ( const name in buffergeometry.attributes ) {
|
|
|
|
|
|
+ for ( const name in geometry.attributes ) {
|
|
|
|
|
|
- attributes.remove( buffergeometry.attributes[ name ] );
|
|
|
|
|
|
+ attributes.remove( geometry.attributes[ name ] );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
geometry.removeEventListener( 'dispose', onGeometryDispose );
|
|
geometry.removeEventListener( 'dispose', onGeometryDispose );
|
|
|
|
|
|
- geometries.delete( geometry );
|
|
|
|
|
|
+ delete geometries[ geometry.id ];
|
|
|
|
|
|
- const attribute = wireframeAttributes.get( buffergeometry );
|
|
|
|
|
|
+ const attribute = wireframeAttributes.get( geometry );
|
|
|
|
|
|
if ( attribute ) {
|
|
if ( attribute ) {
|
|
|
|
|
|
attributes.remove( attribute );
|
|
attributes.remove( attribute );
|
|
- wireframeAttributes.delete( buffergeometry );
|
|
|
|
|
|
+ wireframeAttributes.delete( geometry );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- bindingStates.releaseStatesOfGeometry( buffergeometry );
|
|
|
|
|
|
+ bindingStates.releaseStatesOfGeometry( geometry );
|
|
|
|
|
|
if ( geometry.isInstancedBufferGeometry === true ) {
|
|
if ( geometry.isInstancedBufferGeometry === true ) {
|
|
|
|
|
|
@@ -52,27 +51,15 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
|
|
|
function get( object, geometry ) {
|
|
function get( object, geometry ) {
|
|
|
|
|
|
- let buffergeometry = geometries.get( geometry );
|
|
|
|
-
|
|
|
|
- if ( buffergeometry ) return buffergeometry;
|
|
|
|
|
|
+ if ( geometries[ geometry.id ] === true ) return geometry;
|
|
|
|
|
|
geometry.addEventListener( 'dispose', onGeometryDispose );
|
|
geometry.addEventListener( 'dispose', onGeometryDispose );
|
|
|
|
|
|
- if ( geometry.isBufferGeometry ) {
|
|
|
|
-
|
|
|
|
- buffergeometry = geometry;
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
-
|
|
|
|
- console.log( 'TODO: Remove this', geometry );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- geometries.set( geometry, buffergeometry );
|
|
|
|
|
|
+ geometries[ geometry.id ] = true;
|
|
|
|
|
|
info.memory.geometries ++;
|
|
info.memory.geometries ++;
|
|
|
|
|
|
- return buffergeometry;
|
|
|
|
|
|
+ return geometry;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|