diff --git a/src/nodes/utils/ReflectorNode.js b/src/nodes/utils/ReflectorNode.js index 0841a3972f759e..1aa3b31db1fa3e 100644 --- a/src/nodes/utils/ReflectorNode.js +++ b/src/nodes/utils/ReflectorNode.js @@ -161,6 +161,17 @@ class ReflectorNode extends TextureNode { } + /** + * Frees internal resources. Should be called when the node is no longer in use. + */ + dispose() { + + super.dispose(); + + this._reflectorBaseNode.dispose(); + + } + } /** @@ -269,9 +280,9 @@ class ReflectorBaseNode extends Node { /** * Weak map for managing render targets. * - * @type {WeakMap} + * @type {Map} */ - this.renderTargets = new WeakMap(); + this.renderTargets = new Map(); /** * Force render even if reflector is facing away from camera. @@ -308,6 +319,21 @@ class ReflectorBaseNode extends Node { } + /** + * Frees internal resources. Should be called when the node is no longer in use. + */ + dispose() { + + super.dispose(); + + for ( const renderTarget of this.renderTargets.values() ) { + + renderTarget.dispose(); + + } + + } + /** * Returns a virtual camera for the given camera. The virtual camera is used to * render the scene from the reflector's view so correct reflections can be produced. diff --git a/src/renderers/common/Textures.js b/src/renderers/common/Textures.js index 65cb5b98d8fe3c..3953bf5fe507ee 100644 --- a/src/renderers/common/Textures.js +++ b/src/renderers/common/Textures.js @@ -343,8 +343,6 @@ class Textures extends DataMap { this._destroyTexture( texture ); - this.info.memory.textures --; - }; texture.addEventListener( 'dispose', onDispose ); @@ -445,10 +443,16 @@ class Textures extends DataMap { */ _destroyTexture( texture ) { - this.backend.destroySampler( texture ); - this.backend.destroyTexture( texture ); + if ( this.has( texture ) === true ) { + + this.backend.destroySampler( texture ); + this.backend.destroyTexture( texture ); + + this.delete( texture ); - this.delete( texture ); + this.info.memory.textures --; + + } }