From d3428c31d9f8db7e1d263a69b0778e4c579491ff Mon Sep 17 00:00:00 2001 From: Benjamin Guignabert Date: Thu, 8 Jul 2021 11:09:49 +0200 Subject: [PATCH 1/2] adding texture disposes --- src/Materials/Textures/multiRenderTarget.ts | 12 +++++++++++- src/Materials/Textures/prePassRenderTarget.ts | 4 ++++ src/Rendering/prePassRendererSceneComponent.ts | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Materials/Textures/multiRenderTarget.ts b/src/Materials/Textures/multiRenderTarget.ts index b15103112fb..b8caf3453d2 100644 --- a/src/Materials/Textures/multiRenderTarget.ts +++ b/src/Materials/Textures/multiRenderTarget.ts @@ -204,6 +204,7 @@ export class MultiRenderTarget extends RenderTargetTexture { this._createInternalTextures(); if (forceFullRebuild) { + this._releaseTextures(); this._createTextures(); } @@ -224,6 +225,14 @@ export class MultiRenderTarget extends RenderTargetTexture { this._texture = this._internalTextures[0]; } + private _releaseTextures(): void { + if (this._textures) { + for (let i = 0; i < this._textures.length; i++) { + this._textures[i].dispose(); + } + } + } + private _createTextures(): void { this._textures = []; for (var i = 0; i < this._internalTextures.length; i++) { @@ -308,7 +317,7 @@ export class MultiRenderTarget extends RenderTargetTexture { */ public dispose(): void { this.releaseInternalTextures(); - + this._releaseTextures(); super.dispose(); } @@ -325,6 +334,7 @@ export class MultiRenderTarget extends RenderTargetTexture { this._internalTextures[i].dispose(); this._internalTextures.splice(i, 1); } + this._textures[i]._texture = null; } } } diff --git a/src/Materials/Textures/prePassRenderTarget.ts b/src/Materials/Textures/prePassRenderTarget.ts index 16ecf91c175..fdb72438135 100644 --- a/src/Materials/Textures/prePassRenderTarget.ts +++ b/src/Materials/Textures/prePassRenderTarget.ts @@ -127,5 +127,9 @@ export class PrePassRenderTarget extends MultiRenderTarget { if (this.imageProcessingPostProcess) { this.imageProcessingPostProcess.dispose(); } + + if (this.renderTargetTexture) { + this.renderTargetTexture._prePassRenderTarget = null; + } } } \ No newline at end of file diff --git a/src/Rendering/prePassRendererSceneComponent.ts b/src/Rendering/prePassRendererSceneComponent.ts index 439f2f5711c..dbf95dbaf48 100644 --- a/src/Rendering/prePassRendererSceneComponent.ts +++ b/src/Rendering/prePassRendererSceneComponent.ts @@ -37,7 +37,7 @@ declare module "../abstractScene" { declare module "../Materials/Textures/renderTargetTexture" { export interface RenderTargetTexture { /** @hidden */ - _prePassRenderTarget: PrePassRenderTarget; + _prePassRenderTarget: Nullable; } } From 5256aeb6e718903a2efa2a83f3d608c761417949 Mon Sep 17 00:00:00 2001 From: Benjamin Guignabert Date: Thu, 8 Jul 2021 11:11:36 +0200 Subject: [PATCH 2/2] update what's new --- dist/preview release/what's new.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dist/preview release/what's new.md b/dist/preview release/what's new.md index bc53b61ddce..bdf8355e0c8 100644 --- a/dist/preview release/what's new.md +++ b/dist/preview release/what's new.md @@ -275,6 +275,7 @@ - Fix for triggering interactions on nearby meshes when performing a near interaction grab ([rickfromwork](https://github.com/rickfromwork)) - Fix for near interaction failing when multiple utility layers are present ([rickfromwork](https://github.com/rickfromwork)) - Fix handling of events to support multiple canvas scenarios DeviceInputSystem ([PolygonalSun](https://github.com/PolygonalSun)) +- Fix undisposed textures in PrePass effects that would cause the scene to have more textures than expected ([CraigFeldspar](https://github.com/CraigFeldspar)) ## Breaking changes