From 43903bb378e3ac83b1841aefcd62b74daa299663 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 25 May 2024 09:26:21 +0300 Subject: [PATCH] memory-related refactor --- src/assets/Assets.cpp | 24 ++++++++++++------------ src/assets/Assets.hpp | 12 ++++++------ src/assets/AssetsLoader.cpp | 2 +- src/assets/assetload_funcs.cpp | 13 ++++++------- src/frontend/LevelFrontend.cpp | 2 +- src/frontend/menu.cpp | 15 ++++++++++----- src/graphics/core/Shader.cpp | 4 ++-- src/graphics/core/Shader.hpp | 3 ++- src/graphics/ui/GUI.cpp | 2 +- 9 files changed, 41 insertions(+), 36 deletions(-) diff --git a/src/assets/Assets.cpp b/src/assets/Assets.cpp index d1c93360..12a3db65 100644 --- a/src/assets/Assets.cpp +++ b/src/assets/Assets.cpp @@ -18,8 +18,8 @@ Texture* Assets::getTexture(std::string name) const { return found->second.get(); } -void Assets::store(Texture* texture, std::string name){ - textures.emplace(name, texture); +void Assets::store(std::unique_ptr texture, std::string name){ + textures.emplace(name, std::move(texture)); } @@ -30,8 +30,8 @@ Shader* Assets::getShader(std::string name) const{ return found->second.get(); } -void Assets::store(Shader* shader, std::string name){ - shaders.emplace(name, shader); +void Assets::store(std::unique_ptr shader, std::string name){ + shaders.emplace(name, std::move(shader)); } Font* Assets::getFont(std::string name) const { @@ -41,8 +41,8 @@ Font* Assets::getFont(std::string name) const { return found->second.get(); } -void Assets::store(Font* font, std::string name){ - fonts.emplace(name, font); +void Assets::store(std::unique_ptr font, std::string name){ + fonts.emplace(name, std::move(font)); } Atlas* Assets::getAtlas(std::string name) const { @@ -52,8 +52,8 @@ Atlas* Assets::getAtlas(std::string name) const { return found->second.get(); } -void Assets::store(Atlas* atlas, std::string name){ - atlases.emplace(name, atlas); +void Assets::store(std::unique_ptr atlas, std::string name){ + atlases.emplace(name, std::move(atlas)); } audio::Sound* Assets::getSound(std::string name) const { @@ -63,8 +63,8 @@ audio::Sound* Assets::getSound(std::string name) const { return found->second.get(); } -void Assets::store(audio::Sound* sound, std::string name) { - sounds.emplace(name, sound); +void Assets::store(std::unique_ptr sound, std::string name) { + sounds.emplace(name, std::move(sound)); } const std::vector& Assets::getAnimations() { @@ -82,6 +82,6 @@ UiDocument* Assets::getLayout(std::string name) const { return found->second.get(); } -void Assets::store(UiDocument* layout, std::string name) { - layouts[name] = std::shared_ptr(layout); +void Assets::store(std::unique_ptr layout, std::string name) { + layouts[name] = std::shared_ptr(std::move(layout)); } diff --git a/src/assets/Assets.hpp b/src/assets/Assets.hpp index a9d4b927..c06e764f 100644 --- a/src/assets/Assets.hpp +++ b/src/assets/Assets.hpp @@ -39,25 +39,25 @@ public: ~Assets(); Texture* getTexture(std::string name) const; - void store(Texture* texture, std::string name); + void store(std::unique_ptr texture, std::string name); Shader* getShader(std::string name) const; - void store(Shader* shader, std::string name); + void store(std::unique_ptr shader, std::string name); Font* getFont(std::string name) const; - void store(Font* font, std::string name); + void store(std::unique_ptr font, std::string name); Atlas* getAtlas(std::string name) const; - void store(Atlas* atlas, std::string name); + void store(std::unique_ptr atlas, std::string name); audio::Sound* getSound(std::string name) const; - void store(audio::Sound* sound, std::string name); + void store(std::unique_ptr sound, std::string name); const std::vector& getAnimations(); void store(const TextureAnimation& animation); UiDocument* getLayout(std::string name) const; - void store(UiDocument* layout, std::string name); + void store(std::unique_ptr layout, std::string name); }; #endif // ASSETS_ASSETS_HPP_ diff --git a/src/assets/AssetsLoader.cpp b/src/assets/AssetsLoader.cpp index b9fcc1e3..1f194c21 100644 --- a/src/assets/AssetsLoader.cpp +++ b/src/assets/AssetsLoader.cpp @@ -218,7 +218,7 @@ bool AssetsLoader::loadExternalTexture( if (fs::exists(path)) { try { auto image = imageio::read(path.string()); - assets->store(Texture::from(image.get()).release(), name); + assets->store(Texture::from(image.get()), name); return true; } catch (const std::exception& err) { logger.error() << "error while loading external " diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp index 9dae4c78..bfe799bb 100644 --- a/src/assets/assetload_funcs.cpp +++ b/src/assets/assetload_funcs.cpp @@ -44,7 +44,7 @@ assetload::postfunc assetload::texture( imageio::read(paths->find(filename+".png").u8string()).release() ); return [name, image](auto assets) { - assets->store(Texture::from(image.get()).release(), name); + assets->store(Texture::from(image.get()), name); }; } @@ -103,7 +103,7 @@ assetload::postfunc assetload::atlas( Atlas* atlas = builder.build(2, false).release(); return [=](auto assets) { atlas->prepare(); - assets->store(atlas, name); + assets->store(std::unique_ptr(atlas), name); for (const auto& file : names) { animation(assets, paths, name, directory, file, atlas); } @@ -129,7 +129,7 @@ assetload::postfunc assetload::font( for (auto& page : *pages) { textures.emplace_back(Texture::from(page.get())); } - assets->store(new Font(std::move(textures), res, 4), name); + assets->store(std::make_unique(std::move(textures), res, 4), name); }; } @@ -143,8 +143,7 @@ assetload::postfunc assetload::layout( return [=](auto assets) { try { auto cfg = std::dynamic_pointer_cast(config); - auto document = UiDocument::read(cfg->env, name, file); - assets->store(document.release(), name); + assets->store(UiDocument::read(cfg->env, name, file), name); } catch (const parsing_error& err) { throw std::runtime_error( "failed to parse layout XML '"+file+"':\n"+err.errorLog() @@ -190,7 +189,7 @@ assetload::postfunc assetload::sound( } auto sound = baseSound.release(); return [=](auto assets) { - assets->store(sound, name); + assets->store(std::unique_ptr(sound), name); }; } @@ -305,7 +304,7 @@ static bool animation( auto animation = create_animation( srcAtlas.get(), dstAtlas, name, builder.getNames(), frameList ); - assets->store(srcAtlas.release(), atlasName + "/" + name + "_animation"); + assets->store(std::move(srcAtlas), atlasName + "/" + name + "_animation"); assets->store(animation); return true; } diff --git a/src/frontend/LevelFrontend.cpp b/src/frontend/LevelFrontend.cpp index d44df1d1..7a62ca50 100644 --- a/src/frontend/LevelFrontend.cpp +++ b/src/frontend/LevelFrontend.cpp @@ -19,7 +19,7 @@ LevelFrontend::LevelFrontend(LevelController* controller, Assets* assets) contentCache(std::make_unique(level->content, assets)) { assets->store( - BlocksPreview::build(contentCache.get(), assets, level->content).release(), + BlocksPreview::build(contentCache.get(), assets, level->content), "block-previews" ); controller->getPlayerController()->listenBlockInteraction( diff --git a/src/frontend/menu.cpp b/src/frontend/menu.cpp index 4c89aeaa..2abc23ac 100644 --- a/src/frontend/menu.cpp +++ b/src/frontend/menu.cpp @@ -62,9 +62,11 @@ gui::page_loader_func menus::create_page_loader(Engine* engine) { auto file = engine->getResPaths()->find("layouts/pages/"+name+".xml"); auto fullname = "core:pages/"+name; - auto document = UiDocument::read(scripting::get_root_environment(), fullname, file).release(); - engine->getAssets()->store(document, fullname); - + auto document_ptr = UiDocument::read( + scripting::get_root_environment(), fullname, file + ); + auto document = document_ptr.get(); + engine->getAssets()->store(std::move(document_ptr), fullname); scripting::on_ui_open(document, std::move(args)); return document->getRoot(); }; @@ -75,8 +77,11 @@ UiDocument* menus::show(Engine* engine, const std::string& name, std::vectorgetResPaths()->find("layouts/"+name+".xml"); auto fullname = "core:layouts/"+name; - auto document = UiDocument::read(scripting::get_root_environment(), fullname, file).release(); - engine->getAssets()->store(document, fullname); + auto document_ptr = UiDocument::read( + scripting::get_root_environment(), fullname, file + ); + auto document = document_ptr.get(); + engine->getAssets()->store(std::move(document_ptr), fullname); scripting::on_ui_open(document, std::move(args)); menu->addPage(name, document->getRoot()); menu->setPage(name); diff --git a/src/graphics/core/Shader.cpp b/src/graphics/core/Shader.cpp index b6bb6802..62d82ee3 100644 --- a/src/graphics/core/Shader.cpp +++ b/src/graphics/core/Shader.cpp @@ -98,7 +98,7 @@ glshader compile_shader(GLenum type, const GLchar* source, const std::string& fi return glshader(new GLuint(shader), shader_deleter); } -Shader* Shader::create( +std::unique_ptr Shader::create( const std::string& vertexFile, const std::string& fragmentFile, const std::string& vertexCode, @@ -125,5 +125,5 @@ Shader* Shader::create( "shader program linking failed:\n"+std::string(infoLog) ); } - return new Shader(id); + return std::make_unique(id); } diff --git a/src/graphics/core/Shader.hpp b/src/graphics/core/Shader.hpp index 64b4cc83..25d182a5 100644 --- a/src/graphics/core/Shader.hpp +++ b/src/graphics/core/Shader.hpp @@ -4,6 +4,7 @@ #include "../../typedefs.hpp" #include +#include #include #include @@ -36,7 +37,7 @@ public: /// @param vertexSource vertex shader source code /// @param fragmentSource fragment shader source code /// @return linked shader program containing vertex and fragment shaders - static Shader* create( + static std::unique_ptr create( const std::string& vertexFile, const std::string& fragmentFile, const std::string& vertexSource, diff --git a/src/graphics/ui/GUI.cpp b/src/graphics/ui/GUI.cpp index 9ec6754d..63576877 100644 --- a/src/graphics/ui/GUI.cpp +++ b/src/graphics/ui/GUI.cpp @@ -51,7 +51,7 @@ std::shared_ptr GUI::getMenu() { } void GUI::onAssetsLoad(Assets* assets) { - assets->store(new UiDocument( + assets->store(std::make_unique( "core:root", uidocscript {}, std::dynamic_pointer_cast(container),