From 399999f23d3d53b9d0e98717bb055bdabd7fd736 Mon Sep 17 00:00:00 2001 From: duckietm Date: Fri, 10 Apr 2026 11:42:30 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=86=99=20Memory=20usage=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/avatar/src/AvatarImage.ts | 3 +++ packages/avatar/src/cache/ImageData.ts | 6 ++++++ packages/camera/src/RoomCameraWidgetManager.ts | 7 ++++++- .../visualization/avatar/AvatarVisualization.ts | 12 ++++++++++++ .../furniture/IsometricImageFurniVisualization.ts | 11 +++++++++++ .../room/src/object/visualization/room/RoomPlane.ts | 10 ++++++++++ 6 files changed, 48 insertions(+), 1 deletion(-) diff --git a/packages/avatar/src/AvatarImage.ts b/packages/avatar/src/AvatarImage.ts index 6f7e92b..17b48be 100644 --- a/packages/avatar/src/AvatarImage.ts +++ b/packages/avatar/src/AvatarImage.ts @@ -315,6 +315,9 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener const url = canvas.toDataURL('image/png'); + canvas.width = 0; + canvas.height = 0; + return url; } diff --git a/packages/avatar/src/cache/ImageData.ts b/packages/avatar/src/cache/ImageData.ts index c43c2c2..00039cd 100644 --- a/packages/avatar/src/cache/ImageData.ts +++ b/packages/avatar/src/cache/ImageData.ts @@ -23,6 +23,12 @@ export class ImageData public dispose(): void { + if(this._container) + { + this._container.destroy({ children: true }); + this._container = null; + } + this._texture = null; this._regPoint = null; this._colorTransform = null; diff --git a/packages/camera/src/RoomCameraWidgetManager.ts b/packages/camera/src/RoomCameraWidgetManager.ts index 1d28a4c..f45f933 100644 --- a/packages/camera/src/RoomCameraWidgetManager.ts +++ b/packages/camera/src/RoomCameraWidgetManager.ts @@ -117,7 +117,12 @@ export class RoomCameraWidgetManager implements IRoomCameraWidgetManager TextureUtils.writeToTexture(container, renderTexture); - return await TextureUtils.generateImage(renderTexture); + const image = await TextureUtils.generateImage(renderTexture); + + renderTexture.destroy(true); + container.destroy({ children: true }); + + return image; } public get effects(): Map diff --git a/packages/room/src/object/visualization/avatar/AvatarVisualization.ts b/packages/room/src/object/visualization/avatar/AvatarVisualization.ts index ff2cbf6..40a9d30 100644 --- a/packages/room/src/object/visualization/avatar/AvatarVisualization.ts +++ b/packages/room/src/object/visualization/avatar/AvatarVisualization.ts @@ -164,6 +164,18 @@ export class AvatarVisualization extends RoomObjectSpriteVisualization implement if(this._avatarImage) this._avatarImage.dispose(); + if(this._cachedAvatars) + { + for(const avatar of this._cachedAvatars.getValues()) avatar && avatar.dispose(); + this._cachedAvatars.reset(); + } + + if(this._cachedAvatarEffects) + { + for(const avatar of this._cachedAvatarEffects.getValues()) avatar && avatar.dispose(); + this._cachedAvatarEffects.reset(); + } + if(this._reflectionOppositeTexture) { this._reflectionOppositeTexture.destroy(true); diff --git a/packages/room/src/object/visualization/furniture/IsometricImageFurniVisualization.ts b/packages/room/src/object/visualization/furniture/IsometricImageFurniVisualization.ts index 799fc68..79ea71f 100644 --- a/packages/room/src/object/visualization/furniture/IsometricImageFurniVisualization.ts +++ b/packages/room/src/object/visualization/furniture/IsometricImageFurniVisualization.ts @@ -27,6 +27,17 @@ export class IsometricImageFurniVisualization extends FurnitureAnimatedVisualiza this._photoUrl = null; } + public dispose(): void { + if (this._thumbnailTexture instanceof RenderTexture) { + this._thumbnailTexture.destroy(true); + } + + this._thumbnailTexture = null; + this._thumbnailImageNormal = null; + + super.dispose(); + } + public get hasThumbnailImage(): boolean { return !(this._thumbnailImageNormal == null); } diff --git a/packages/room/src/object/visualization/room/RoomPlane.ts b/packages/room/src/object/visualization/room/RoomPlane.ts index 116bdd4..6ac3041 100644 --- a/packages/room/src/object/visualization/room/RoomPlane.ts +++ b/packages/room/src/object/visualization/room/RoomPlane.ts @@ -158,6 +158,16 @@ export class RoomPlane implements IRoomPlane this._animationLayers = []; } + this._windowReflectionLastVisible.clear(); + this._windowReflectionFadeOut.clear(); + this._windowReflectionFirstSeenAt.clear(); + + if(this._maskFilter) + { + this._maskFilter.destroy(); + this._maskFilter = null; + } + this._disposed = true; }