From 84c552c5b84b96ed35286f490960907f2a8014a1 Mon Sep 17 00:00:00 2001 From: Redacted Date: Fri, 3 Jan 2025 20:39:35 -0500 Subject: [PATCH] Fixed memory issue. --- CMakeLists.txt | 2 +- include/Engine/types/InstancedTexture.h | 2 +- src/Engine/types/entity/InstancedSprite.cpp | 13 +++++++++++-- src/Engine/types/scene/Scene.cpp | 4 ++-- src/Game/Entities/Box.cpp | 1 - 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 19f1444..4165403 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ CPMAddPackage( URL https://git.redacted.cc/Redacted/ReWindow/archive/Prerelease-26.zip ) -set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra") +#set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra") file(GLOB_RECURSE HEADERS "include/*.h" "include/*.hpp") file(GLOB_RECURSE SOURCES "src/*.c" "src/*.cpp") diff --git a/include/Engine/types/InstancedTexture.h b/include/Engine/types/InstancedTexture.h index a384baa..c3aef1f 100644 --- a/include/Engine/types/InstancedTexture.h +++ b/include/Engine/types/InstancedTexture.h @@ -9,7 +9,7 @@ namespace Engine { class Engine::InstancedTexture { protected: - JGL::Texture* texture; + JGL::Texture* texture = nullptr; std::vector users{}; public: [[nodiscard]] size_t ReferenceCount() { return users.size(); } diff --git a/src/Engine/types/entity/InstancedSprite.cpp b/src/Engine/types/entity/InstancedSprite.cpp index cb0d18d..9d47f30 100644 --- a/src/Engine/types/entity/InstancedSprite.cpp +++ b/src/Engine/types/entity/InstancedSprite.cpp @@ -3,13 +3,22 @@ using namespace Engine; Texture* InstancedSprite::GetTexture() { - return Globals::CurrentScene->GetInstancedTexture(this)->GetTexture(); + auto* itx = Globals::CurrentScene->GetInstancedTexture(this); + if (itx) + return itx->GetTexture(); + + return nullptr; } Texture* InstancedSprite::GetAlphaMask() { if (Sprite::GetAlphaMask()) return Sprite::GetAlphaMask(); - return Globals::CurrentScene->GetInstancedAlphaMask(this)->GetTexture(); + + auto* ita = Globals::CurrentScene->GetInstancedAlphaMask(this); + if (ita) + return ita->GetTexture(); + + return nullptr; } InstancedSprite::~InstancedSprite() { diff --git a/src/Engine/types/scene/Scene.cpp b/src/Engine/types/scene/Scene.cpp index 99309cc..451a915 100644 --- a/src/Engine/types/scene/Scene.cpp +++ b/src/Engine/types/scene/Scene.cpp @@ -167,10 +167,10 @@ InstancedTexture* Scene::GetInstancedAlphaMask(const InstancedSprite* user) { if (itx->InUseBy(user)) return itx; - if (!user->GetAlphaMaskFilesystemPath().empty()) { + if (!user->GetAlphaMaskFilesystemPath().empty() && !instanced_alpha_masks.empty()) { auto *t = new Texture(user->GetTextureFilesystemPath()); auto *itx = new InstancedTexture(t, user); - instanced_textures.push_back(itx); + instanced_alpha_masks.push_back(itx); return itx; } return nullptr; diff --git a/src/Game/Entities/Box.cpp b/src/Game/Entities/Box.cpp index 9ce0f93..0505462 100644 --- a/src/Game/Entities/Box.cpp +++ b/src/Game/Entities/Box.cpp @@ -1,6 +1,5 @@ #include #include -#include void Game::Box::Update() { if (Globals::Window->IsKeyDown(Keys::W))