From ea88eabb117d9486d47c66fc8d74dd5ad1db8849 Mon Sep 17 00:00:00 2001 From: Almamu Date: Sat, 26 Apr 2025 00:23:21 +0200 Subject: [PATCH] chore: more changes to unique_ptr and shared_ptr --- .../Application/CWallpaperApplication.cpp | 18 +++++++------- .../Application/CWallpaperApplication.h | 2 +- .../Assets/CCombinedContainer.cpp | 8 +++---- .../Assets/CCombinedContainer.h | 4 ++-- src/WallpaperEngine/Assets/CFileEntry.h | 3 ++- src/WallpaperEngine/Assets/CTexture.cpp | 2 +- .../Assets/CVirtualContainer.cpp | 12 ++++++---- .../Assets/CVirtualContainer.h | 1 + src/WallpaperEngine/Core/CObject.cpp | 2 +- src/WallpaperEngine/Core/CObject.h | 2 +- src/WallpaperEngine/Core/CProject.cpp | 10 ++++---- src/WallpaperEngine/Core/CProject.h | 8 +++---- src/WallpaperEngine/Core/Objects/CEffect.cpp | 14 +++++------ src/WallpaperEngine/Core/Objects/CEffect.h | 6 ++--- src/WallpaperEngine/Core/Objects/CImage.cpp | 2 +- src/WallpaperEngine/Core/Objects/CImage.h | 2 +- .../Core/Objects/CParticle.cpp | 2 +- src/WallpaperEngine/Core/Objects/CParticle.h | 2 +- .../Core/Objects/Images/CMaterial.cpp | 4 ++-- .../Core/Objects/Images/CMaterial.h | 4 ++-- .../Core/Objects/Images/Materials/CPass.cpp | 4 ++-- .../Core/Wallpapers/CScene.cpp | 22 +++++++++-------- src/WallpaperEngine/Core/Wallpapers/CScene.h | 18 +++++++------- src/WallpaperEngine/Render/CObject.cpp | 2 +- src/WallpaperEngine/Render/CObject.h | 2 +- src/WallpaperEngine/Render/CWallpaper.cpp | 6 ++--- src/WallpaperEngine/Render/CWallpaper.h | 2 +- .../Render/Objects/CEffect.cpp | 4 ++-- src/WallpaperEngine/Render/Objects/CImage.cpp | 2 +- .../Render/Shaders/CShader.cpp | 2 +- src/WallpaperEngine/Render/Shaders/CShader.h | 2 +- .../Render/Shaders/CShaderUnit.cpp | 24 +++++++++---------- .../Render/Shaders/CShaderUnit.h | 5 ++-- .../Render/Wallpapers/CScene.cpp | 2 +- .../WebBrowser/CEF/CWPSchemeHandler.h | 2 +- 35 files changed, 108 insertions(+), 99 deletions(-) diff --git a/src/WallpaperEngine/Application/CWallpaperApplication.cpp b/src/WallpaperEngine/Application/CWallpaperApplication.cpp index 138f38f..0908f24 100644 --- a/src/WallpaperEngine/Application/CWallpaperApplication.cpp +++ b/src/WallpaperEngine/Application/CWallpaperApplication.cpp @@ -59,21 +59,21 @@ CWallpaperApplication::~CWallpaperApplication () { delete m_browserContext; } -void CWallpaperApplication::setupContainer (CCombinedContainer& container, const std::string& bg) const { +void CWallpaperApplication::setupContainer (const std::shared_ptr& container, const std::string& bg) const { const std::filesystem::path basepath = bg; - container.add (new CDirectory (basepath)); - container.addPkg (basepath / "scene.pkg"); - container.addPkg (basepath / "gifscene.pkg"); + container->add (std::make_shared (basepath)); + container->addPkg (basepath / "scene.pkg"); + container->addPkg (basepath / "gifscene.pkg"); try { - container.add (new CDirectory (this->m_context.settings.general.assets)); + container->add (std::make_shared (this->m_context.settings.general.assets)); } catch (CAssetLoadException&) { sLog.exception ("Cannot find a valid assets folder, resolved to ", this->m_context.settings.general.assets); } // TODO: move this somewhere else? - auto* virtualContainer = new CVirtualContainer (); + auto virtualContainer = std::make_shared (); // // Had to get a little creative with the effects to achieve the same bloom effect without any custom code @@ -206,7 +206,7 @@ void CWallpaperApplication::setupContainer (CCombinedContainer& container, const "}" ); - container.add (virtualContainer); + container->add (virtualContainer); } void CWallpaperApplication::loadBackgrounds () { @@ -227,9 +227,9 @@ void CWallpaperApplication::loadBackgrounds () { } Core::CProject* CWallpaperApplication::loadBackground (const std::string& bg) { - auto* container = new CCombinedContainer (); + const auto container = std::make_shared (); - this->setupContainer (*container, bg); + this->setupContainer (container, bg); return Core::CProject::fromFile ("project.json", container); } diff --git a/src/WallpaperEngine/Application/CWallpaperApplication.h b/src/WallpaperEngine/Application/CWallpaperApplication.h index 5389023..c42478b 100644 --- a/src/WallpaperEngine/Application/CWallpaperApplication.h +++ b/src/WallpaperEngine/Application/CWallpaperApplication.h @@ -79,7 +79,7 @@ class CWallpaperApplication { * @param container * @param bg */ - void setupContainer (CCombinedContainer& container, const std::string& bg) const; + void setupContainer (const std::shared_ptr& container, const std::string& bg) const; /** * Loads projects based off the settings */ diff --git a/src/WallpaperEngine/Assets/CCombinedContainer.cpp b/src/WallpaperEngine/Assets/CCombinedContainer.cpp index 3f7cb41..b4fb32d 100644 --- a/src/WallpaperEngine/Assets/CCombinedContainer.cpp +++ b/src/WallpaperEngine/Assets/CCombinedContainer.cpp @@ -8,14 +8,14 @@ using namespace WallpaperEngine::Assets; CCombinedContainer::CCombinedContainer () : CContainer () {} -void CCombinedContainer::add (CContainer* container) { +void CCombinedContainer::add (const std::shared_ptr& container) { this->m_containers.emplace_back (container); } void CCombinedContainer::addPkg (const std::filesystem::path& path) { try { // add the package to the list - this->add (new CPackage (path)); + this->add (std::make_shared (path)); sLog.out ("Detected ", path.filename (), " file at ", path, ". Adding to list of searchable paths"); } catch (CPackageLoadException&) { // ignore this error, the package file was not found @@ -27,7 +27,7 @@ void CCombinedContainer::addPkg (const std::filesystem::path& path) { } std::filesystem::path CCombinedContainer::resolveRealFile (const std::filesystem::path& filename) const { - for (const auto cur : this->m_containers) { + for (const auto& cur : this->m_containers) { try { // try to read the file on the current container, if the file doesn't exists // an exception will be thrown @@ -42,7 +42,7 @@ std::filesystem::path CCombinedContainer::resolveRealFile (const std::filesystem } std::shared_ptr CCombinedContainer::readFile (const std::filesystem::path& filename, uint32_t* length) const { - for (const auto cur : this->m_containers) { + for (const auto& cur : this->m_containers) { try { // try to read the file on the current container, if the file doesn't exists // an exception will be thrown diff --git a/src/WallpaperEngine/Assets/CCombinedContainer.h b/src/WallpaperEngine/Assets/CCombinedContainer.h index 1927d52..4054780 100644 --- a/src/WallpaperEngine/Assets/CCombinedContainer.h +++ b/src/WallpaperEngine/Assets/CCombinedContainer.h @@ -19,7 +19,7 @@ class CCombinedContainer final : public CContainer { * * @param container */ - void add (CContainer* container); + void add (const std::shared_ptr& container); /** * Adds the given package to the list * @@ -34,6 +34,6 @@ class CCombinedContainer final : public CContainer { private: /** The list of containers to search files off from */ - std::vector m_containers; + std::vector> m_containers; }; }; // namespace WallpaperEngine::Assets \ No newline at end of file diff --git a/src/WallpaperEngine/Assets/CFileEntry.h b/src/WallpaperEngine/Assets/CFileEntry.h index a5724bd..84b5d23 100644 --- a/src/WallpaperEngine/Assets/CFileEntry.h +++ b/src/WallpaperEngine/Assets/CFileEntry.h @@ -1,6 +1,7 @@ #pragma once #include +#include namespace WallpaperEngine::Assets { /** @@ -9,7 +10,7 @@ namespace WallpaperEngine::Assets { class CFileEntry { public: CFileEntry (std::shared_ptr content, uint32_t length) : - content (content), + content (std::move(content)), length (length) {} ~CFileEntry() = default; diff --git a/src/WallpaperEngine/Assets/CTexture.cpp b/src/WallpaperEngine/Assets/CTexture.cpp index dd3359f..4b52ec0 100644 --- a/src/WallpaperEngine/Assets/CTexture.cpp +++ b/src/WallpaperEngine/Assets/CTexture.cpp @@ -324,7 +324,7 @@ std::unique_ptr CTexture::parseHeader (const char* file mipmaps.emplace_back (parseMipmap (header.get (), &fileData)); // add the pixmaps back - header->images.insert (std::pair (image, mipmaps)); + header->images.emplace (image, mipmaps); pointer = reinterpret_cast (fileData); } diff --git a/src/WallpaperEngine/Assets/CVirtualContainer.cpp b/src/WallpaperEngine/Assets/CVirtualContainer.cpp index 7851326..e0cc8e8 100644 --- a/src/WallpaperEngine/Assets/CVirtualContainer.cpp +++ b/src/WallpaperEngine/Assets/CVirtualContainer.cpp @@ -5,18 +5,22 @@ using namespace WallpaperEngine::Assets; +CVirtualContainer::CVirtualContainer () : + m_virtualFiles() {} + void CVirtualContainer::add (const std::filesystem::path& filename, const std::shared_ptr& contents, uint32_t length) { - this->m_virtualFiles.insert (std::pair (filename, std::make_unique (contents, length))); + this->m_virtualFiles.emplace (filename, std::make_unique (contents, length)); } void CVirtualContainer::add (const std::filesystem::path& filename, const std::string& contents) { - std::shared_ptr copy = std::shared_ptr (new uint8_t [contents.length () + 1]); + size_t length = contents.length () + 1; + std::shared_ptr copy = std::shared_ptr (new uint8_t [length]); // copy the text AND the \0 - memcpy (copy.get(), contents.c_str (), contents.length () + 1); + memcpy (copy.get(), contents.c_str (), length); // finally add to the container - this->add (filename, copy, contents.length () + 1); + this->add (filename, copy, length); } void CVirtualContainer::add (const std::filesystem::path& filename, const char* contents) { diff --git a/src/WallpaperEngine/Assets/CVirtualContainer.h b/src/WallpaperEngine/Assets/CVirtualContainer.h index 8643f59..567656e 100644 --- a/src/WallpaperEngine/Assets/CVirtualContainer.h +++ b/src/WallpaperEngine/Assets/CVirtualContainer.h @@ -16,6 +16,7 @@ using json = nlohmann::json; */ class CVirtualContainer final : public CContainer { public: + CVirtualContainer (); /** * Adds a new file to the virtual container * diff --git a/src/WallpaperEngine/Core/CObject.cpp b/src/WallpaperEngine/Core/CObject.cpp index 47da1df..5a5a0df 100644 --- a/src/WallpaperEngine/Core/CObject.cpp +++ b/src/WallpaperEngine/Core/CObject.cpp @@ -32,7 +32,7 @@ CObject::CObject ( m_dependencies (std::move(dependencies)) {} const CObject* CObject::fromJSON ( - const json& data, const Wallpapers::CScene* scene, const CContainer* container + const json& data, const Wallpapers::CScene* scene, const std::shared_ptr& container ) { const auto id = jsonFindRequired (data, "id", "Objects must have id"); const auto visible = jsonFindUserConfig (data, scene->getProject(), "visible", true); diff --git a/src/WallpaperEngine/Core/CObject.h b/src/WallpaperEngine/Core/CObject.h index c878b11..d824894 100644 --- a/src/WallpaperEngine/Core/CObject.h +++ b/src/WallpaperEngine/Core/CObject.h @@ -29,7 +29,7 @@ class CObject { friend class Wallpapers::CScene; public: - static const CObject* fromJSON (const json& data, const Wallpapers::CScene* scene, const CContainer* container); + static const CObject* fromJSON (const json& data, const Wallpapers::CScene* scene, const std::shared_ptr& container); template [[nodiscard]] const T* as () const { assert (is ()); diff --git a/src/WallpaperEngine/Core/CProject.cpp b/src/WallpaperEngine/Core/CProject.cpp index a60778b..ba20679 100644 --- a/src/WallpaperEngine/Core/CProject.cpp +++ b/src/WallpaperEngine/Core/CProject.cpp @@ -15,14 +15,14 @@ using namespace WallpaperEngine::Assets; static int backgroundId = -1; CProject::CProject ( - std::string title, std::string type, std::string workshopid, const CContainer* container, + std::string title, std::string type, std::string workshopid, std::shared_ptr container, bool supportsaudioprocessing, const std::map& properties ) : m_workshopid(std::move(workshopid)), m_title (std::move(title)), m_type (std::move(type)), m_wallpaper (nullptr), - m_container (container), + m_container (std::move(container)), m_properties (properties), m_supportsaudioprocessing (supportsaudioprocessing) {} @@ -34,7 +34,7 @@ CProject::~CProject () { this->m_properties.clear (); } -CProject* CProject::fromFile (const std::string& filename, const CContainer* container) { +CProject* CProject::fromFile (const std::string& filename, std::shared_ptr container) { json content = json::parse (container->readFileAsString (filename)); const auto dependency = jsonFindDefault (content, "dependency", "No dependency"); @@ -66,7 +66,7 @@ CProject* CProject::fromFile (const std::string& filename, const CContainer* con continue; } - properties.insert (std::pair (property->getName (), property)); + properties.emplace (property->getName (), property); } } } @@ -118,7 +118,7 @@ const std::string& CProject::getWorkshopId () const { return this->m_workshopid; } -const CContainer* CProject::getContainer () const { +std::shared_ptr CProject::getContainer () const { return this->m_container; } diff --git a/src/WallpaperEngine/Core/CProject.h b/src/WallpaperEngine/Core/CProject.h index ebdf25d..3973f03 100644 --- a/src/WallpaperEngine/Core/CProject.h +++ b/src/WallpaperEngine/Core/CProject.h @@ -22,7 +22,7 @@ class CWallpaper; class CProject { public: ~CProject(); - static CProject* fromFile (const std::string& filename, const CContainer* container); + static CProject* fromFile (const std::string& filename, std::shared_ptr container); [[nodiscard]] const CWallpaper* getWallpaper () const; @@ -32,11 +32,11 @@ class CProject { [[nodiscard]] const std::string& getWorkshopId () const; [[nodiscard]] bool supportsAudioProcessing () const; - [[nodiscard]] const CContainer* getContainer () const; + [[nodiscard]] std::shared_ptr getContainer () const; protected: CProject ( - std::string title, std::string type, std::string workshopid, const CContainer* container, + std::string title, std::string type, std::string workshopid, std::shared_ptr container, bool supportsaudioprocessing, const std::map& properties); void setWallpaper (const CWallpaper* wallpaper); @@ -49,6 +49,6 @@ class CProject { const std::string m_type; const bool m_supportsaudioprocessing; const CWallpaper* m_wallpaper; - const CContainer* m_container; + std::shared_ptr m_container; }; } // namespace WallpaperEngine::Core diff --git a/src/WallpaperEngine/Core/Objects/CEffect.cpp b/src/WallpaperEngine/Core/Objects/CEffect.cpp index 821dff8..190289a 100644 --- a/src/WallpaperEngine/Core/Objects/CEffect.cpp +++ b/src/WallpaperEngine/Core/Objects/CEffect.cpp @@ -37,7 +37,7 @@ CEffect::CEffect ( const CEffect* CEffect::fromJSON ( const json& data, const CUserSettingBoolean* visible, const CProject& project, const Images::CMaterial* material, - const CContainer* container + std::shared_ptr container ) { const auto file = jsonFindRequired (data, "file", "Object effect must have a file"); const auto effectpasses_it = data.find ("passes"); @@ -79,7 +79,7 @@ std::map CEffect::combosFromJSON (const json::const_iterator& auto uppercase = std::string (cur.key ()); std::transform (uppercase.begin (), uppercase.end (), uppercase.begin (), ::toupper); - combos.insert (std::pair (uppercase, cur.value ())); + combos.emplace (uppercase, cur.value ()); } return combos; @@ -153,7 +153,7 @@ std::map } } - constants.insert (std::pair (cur.key (), constant)); + constants.emplace (cur.key (), constant); } return constants; @@ -178,7 +178,7 @@ std::vector CEffect::dependenciesFromJSON (const json::const_iterat } std::vector CEffect::materialsFromJSON ( - const json::const_iterator& passes_it, const std::string& name, const CContainer* container, + const json::const_iterator& passes_it, const std::string& name, const std::shared_ptr& container, std::map overrides ) { std::vector materials; @@ -203,7 +203,7 @@ std::vector CEffect::materialsFromJSON ( if (bind_it != cur.end ()) { for (const auto& bindCur : (*bind_it)) { const auto* bind = Effects::CBind::fromJSON (bindCur); - textureBindings.insert (std::pair (bind->getIndex (), bind)); + textureBindings.emplace (bind->getIndex (), bind); } } @@ -278,11 +278,11 @@ std::map CEffect::overridesFromJSON ( name = texture; } - override.textures.insert (std::pair (textureNumber, name)); + override.textures.emplace (textureNumber, name); } } - result.insert (std::pair (materialNumber, override)); + result.emplace (materialNumber, override); } return result; diff --git a/src/WallpaperEngine/Core/Objects/CEffect.h b/src/WallpaperEngine/Core/Objects/CEffect.h index a50cda3..e9b3f09 100644 --- a/src/WallpaperEngine/Core/Objects/CEffect.h +++ b/src/WallpaperEngine/Core/Objects/CEffect.h @@ -33,7 +33,7 @@ class CEffect { static const CEffect* fromJSON ( const json& data, const CUserSettingBoolean* visible, const CProject& object, const Images::CMaterial* material, - const CContainer* container); + std::shared_ptr container); /** * @return List of dependencies for the effect to work @@ -71,8 +71,8 @@ class CEffect { static std::vector fbosFromJSON (const json::const_iterator& fbos_it); static std::vector dependenciesFromJSON (const json::const_iterator& dependencies_it); static std::vector materialsFromJSON ( - const json::const_iterator& passes_it, const std::string& name, const CContainer* container, - std::map); + const json::const_iterator& passes_it, const std::string& name, + const std::shared_ptr& container, std::map); static std::map overridesFromJSON ( const json::const_iterator& passes_it, const Images::CMaterial* material, const CProject& project); diff --git a/src/WallpaperEngine/Core/Objects/CImage.cpp b/src/WallpaperEngine/Core/Objects/CImage.cpp index 2777183..134d4ab 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.cpp +++ b/src/WallpaperEngine/Core/Objects/CImage.cpp @@ -33,7 +33,7 @@ CImage::CImage ( m_effects (std::move(effects)) {} const WallpaperEngine::Core::CObject* CImage::fromJSON ( - const Wallpapers::CScene* scene, const json& data, const CContainer* container, + const Wallpapers::CScene* scene, const json& data, const std::shared_ptr& container, const CUserSettingBoolean* visible, int id, std::string name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, const CUserSettingVector3* angles, const json::const_iterator& effects_it, std::vector dependencies diff --git a/src/WallpaperEngine/Core/Objects/CImage.h b/src/WallpaperEngine/Core/Objects/CImage.h index beb5056..299a1da 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.h +++ b/src/WallpaperEngine/Core/Objects/CImage.h @@ -30,7 +30,7 @@ class CImage : public CObject { public: static const CObject* fromJSON ( - const Wallpapers::CScene* scene, const json& data, const CContainer* container, + const Wallpapers::CScene* scene, const json& data, const std::shared_ptr& container, const CUserSettingBoolean* visible, int id, std::string name, const CUserSettingVector3* origin, const CUserSettingVector3* scale, const CUserSettingVector3* angles, const json::const_iterator& effects_it, std::vector dependencies); diff --git a/src/WallpaperEngine/Core/Objects/CParticle.cpp b/src/WallpaperEngine/Core/Objects/CParticle.cpp index e7ad875..4e659e2 100644 --- a/src/WallpaperEngine/Core/Objects/CParticle.cpp +++ b/src/WallpaperEngine/Core/Objects/CParticle.cpp @@ -5,7 +5,7 @@ using namespace WallpaperEngine::Core::Objects; const CParticle* CParticle::fromFile ( - const Wallpapers::CScene* scene, const std::string& filename, const CContainer* container, + const Wallpapers::CScene* scene, const std::string& filename, std::shared_ptr container, const CUserSettingBoolean* visible, int id, const std::string& name, const CUserSettingVector3* origin, const CUserSettingVector3* angles, const CUserSettingVector3* scale, std::vector dependencies ) { diff --git a/src/WallpaperEngine/Core/Objects/CParticle.h b/src/WallpaperEngine/Core/Objects/CParticle.h index ed83cd7..38b663a 100644 --- a/src/WallpaperEngine/Core/Objects/CParticle.h +++ b/src/WallpaperEngine/Core/Objects/CParticle.h @@ -18,7 +18,7 @@ class CParticle : public CObject { public: static const CParticle* fromFile ( - const Wallpapers::CScene* scene, const std::string& filename, const CContainer* container, + const Wallpapers::CScene* scene, const std::string& filename, std::shared_ptr container, const CUserSettingBoolean* visible, int id, const std::string& name, const CUserSettingVector3* origin, const CUserSettingVector3* angles, const CUserSettingVector3* scale, std::vector dependencies); diff --git a/src/WallpaperEngine/Core/Objects/Images/CMaterial.cpp b/src/WallpaperEngine/Core/Objects/Images/CMaterial.cpp index f48c9e4..bf2eaab 100644 --- a/src/WallpaperEngine/Core/Objects/Images/CMaterial.cpp +++ b/src/WallpaperEngine/Core/Objects/Images/CMaterial.cpp @@ -29,14 +29,14 @@ CMaterial::CMaterial ( m_solidlayer (solidlayer) {} const CMaterial* CMaterial::fromFile ( - const std::filesystem::path& filename, const CContainer* container, bool solidlayer, + const std::filesystem::path& filename, const std::shared_ptr& container, bool solidlayer, std::map textureBindings, const OverrideInfo* overrides ) { return fromJSON (filename, json::parse (container->readFileAsString (filename)), solidlayer, std::move(textureBindings), overrides); } const CMaterial* CMaterial::fromFile ( - const std::filesystem::path& filename, const std::string& target, const CContainer* container, bool solidlayer, + const std::filesystem::path& filename, const std::string& target, const std::shared_ptr& container, bool solidlayer, std::map textureBindings, const OverrideInfo* overrides ) { return fromJSON (filename, json::parse (container->readFileAsString (filename)), target, solidlayer, std::move(textureBindings), overrides); diff --git a/src/WallpaperEngine/Core/Objects/Images/CMaterial.h b/src/WallpaperEngine/Core/Objects/Images/CMaterial.h index 715b79b..e1a3496 100644 --- a/src/WallpaperEngine/Core/Objects/Images/CMaterial.h +++ b/src/WallpaperEngine/Core/Objects/Images/CMaterial.h @@ -26,10 +26,10 @@ class CMaterial { }; static const CMaterial* fromFile ( - const std::filesystem::path& filename, const Assets::CContainer* container, bool solidlayer = false, + const std::filesystem::path& filename, const std::shared_ptr& container, bool solidlayer = false, std::map textureBindings = {}, const OverrideInfo* overrides = nullptr); static const CMaterial* fromFile ( - const std::filesystem::path& filename, const std::string& target, const Assets::CContainer* container, + const std::filesystem::path& filename, const std::string& target, const std::shared_ptr& container, bool solidlayer = false, std::map textureBindings = {}, const OverrideInfo* overrides = nullptr); static const CMaterial* fromJSON ( diff --git a/src/WallpaperEngine/Core/Objects/Images/Materials/CPass.cpp b/src/WallpaperEngine/Core/Objects/Images/Materials/CPass.cpp index c3fa305..cfbb4aa 100644 --- a/src/WallpaperEngine/Core/Objects/Images/Materials/CPass.cpp +++ b/src/WallpaperEngine/Core/Objects/Images/Materials/CPass.cpp @@ -35,7 +35,7 @@ const CPass* CPass::fromJSON (const json& data, const CMaterial::OverrideInfo* o int textureNumber = -1; for (const auto& cur : (*textures_it)) - textures.insert (std::pair (++textureNumber, cur.is_null () ? "" : cur)); + textures.emplace (++textureNumber, cur.is_null () ? "" : cur); } if (combos_it != data.end ()) { @@ -44,7 +44,7 @@ const CPass* CPass::fromJSON (const json& data, const CMaterial::OverrideInfo* o std::string uppercase = std::string (cur.key ()); std::transform (uppercase.begin (), uppercase.end (), uppercase.begin (), ::toupper); - combos.insert (std::pair (uppercase, cur.value ())); + combos.emplace (uppercase, cur.value ()); } else { sLog.exception ("unexpected non-integer combo on pass"); } diff --git a/src/WallpaperEngine/Core/Wallpapers/CScene.cpp b/src/WallpaperEngine/Core/Wallpapers/CScene.cpp index 446ccac..6c399bf 100644 --- a/src/WallpaperEngine/Core/Wallpapers/CScene.cpp +++ b/src/WallpaperEngine/Core/Wallpapers/CScene.cpp @@ -1,4 +1,6 @@ #include "CScene.h" + +#include #include "WallpaperEngine/Core/CProject.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" @@ -9,15 +11,15 @@ using namespace WallpaperEngine::Core; using namespace WallpaperEngine::Core::Wallpapers; CScene::CScene ( - const CProject& project, const CContainer* container, const Scenes::CCamera* camera, glm::vec3 ambientColor, - const CUserSettingBoolean* bloom, const CUserSettingFloat* bloomStrength, const CUserSettingFloat* bloomThreshold, - bool cameraFade, bool cameraParallax, float cameraParallaxAmount, float cameraParallaxDelay, - float cameraParallaxMouseInfluence, bool cameraPreview, bool cameraShake, float cameraShakeAmplitude, - float cameraShakeRoughness, float cameraShakeSpeed, const CUserSettingVector3* clearColor, - const Scenes::CProjection* orthogonalProjection, glm::vec3 skylightColor + const CProject& project, std::shared_ptr container, const Scenes::CCamera* camera, + glm::vec3 ambientColor, const CUserSettingBoolean* bloom, const CUserSettingFloat* bloomStrength, + const CUserSettingFloat* bloomThreshold, bool cameraFade, bool cameraParallax, float cameraParallaxAmount, + float cameraParallaxDelay, float cameraParallaxMouseInfluence, bool cameraPreview, bool cameraShake, + float cameraShakeAmplitude, float cameraShakeRoughness, float cameraShakeSpeed, + const CUserSettingVector3* clearColor, const Scenes::CProjection* orthogonalProjection, glm::vec3 skylightColor ) : CWallpaper (Type, project), - m_container (container), + m_container (std::move(container)), m_camera (camera), m_ambientColor (ambientColor), m_bloom (bloom), @@ -37,7 +39,7 @@ CScene::CScene ( m_orthogonalProjection (orthogonalProjection), m_skylightColor (skylightColor) {} -const CScene* CScene::fromFile (const std::string& filename, const CProject& project, const CContainer* container) { +const CScene* CScene::fromFile (const std::string& filename, const CProject& project, const std::shared_ptr& container) { json content = json::parse (container->readFileAsString (filename)); const auto general_it = jsonFindRequired (content, "general", "Scenes must have a general section"); @@ -85,12 +87,12 @@ const std::vector& CScene::getObjectsByRenderOrder () const { void CScene::insertObject (const CObject* object) { /// TODO: XXXHACK -- TO REMOVE WHEN PARTICLE SUPPORT IS PROPERLY IMPLEMENTED if (object != nullptr) { - this->m_objects.insert (std::pair (object->getId (), object)); + this->m_objects.emplace (object->getId (), object); this->m_objectsByRenderOrder.emplace_back (object); } } -const CContainer* CScene::getContainer () const { +std::shared_ptr CScene::getContainer () const { return this->m_container; } diff --git a/src/WallpaperEngine/Core/Wallpapers/CScene.h b/src/WallpaperEngine/Core/Wallpapers/CScene.h index 8b191cc..428f09b 100644 --- a/src/WallpaperEngine/Core/Wallpapers/CScene.h +++ b/src/WallpaperEngine/Core/Wallpapers/CScene.h @@ -17,7 +17,7 @@ using json = nlohmann::json; class CScene : public CWallpaper { public: - static const CScene* fromFile (const std::string& filename, const CProject& project, const CContainer* container); + static const CScene* fromFile (const std::string& filename, const CProject& project, const std::shared_ptr& container); [[nodiscard]] const std::map& getObjects () const; [[nodiscard]] const std::vector& getObjectsByRenderOrder () const; @@ -45,21 +45,21 @@ class CScene : public CWallpaper { friend class CWallpaper; CScene ( - const CProject& project, const CContainer* container, const Scenes::CCamera* camera, glm::vec3 ambientColor, - const CUserSettingBoolean* bloom, const CUserSettingFloat* bloomStrength, const CUserSettingFloat* bloomThreshold, - bool cameraFade, bool cameraParallax, float cameraParallaxAmount, float cameraParallaxDelay, - float cameraParallaxMouseInfluence, bool cameraPreview, bool cameraShake, float cameraShakeAmplitude, - float cameraShakeRoughness, float cameraShakeSpeed, const CUserSettingVector3* clearColor, - const Scenes::CProjection* orthogonalProjection, glm::vec3 skylightColor); + const CProject& project, std::shared_ptr container, const Scenes::CCamera* camera, + glm::vec3 ambientColor, const CUserSettingBoolean* bloom, const CUserSettingFloat* bloomStrength, + const CUserSettingFloat* bloomThreshold, bool cameraFade, bool cameraParallax, float cameraParallaxAmount, + float cameraParallaxDelay, float cameraParallaxMouseInfluence, bool cameraPreview, bool cameraShake, + float cameraShakeAmplitude, float cameraShakeRoughness, float cameraShakeSpeed, + const CUserSettingVector3* clearColor, const Scenes::CProjection* orthogonalProjection, glm::vec3 skylightColor); static const std::string Type; void insertObject (const CObject* object); - const CContainer* getContainer () const; + [[nodiscard]] std::shared_ptr getContainer () const; private: - const CContainer* m_container; + const std::shared_ptr m_container; const Scenes::CCamera* m_camera; // data from general section on the json diff --git a/src/WallpaperEngine/Render/CObject.cpp b/src/WallpaperEngine/Render/CObject.cpp index 8fb4cd2..d3b3e0d 100644 --- a/src/WallpaperEngine/Render/CObject.cpp +++ b/src/WallpaperEngine/Render/CObject.cpp @@ -16,7 +16,7 @@ Wallpapers::CScene* CObject::getScene () const { return this->m_scene; } -const CContainer* CObject::getContainer () const { +std::shared_ptr CObject::getContainer () const { return this->getScene ()->getContainer (); } diff --git a/src/WallpaperEngine/Render/CObject.h b/src/WallpaperEngine/Render/CObject.h index 008f24f..b0714d5 100644 --- a/src/WallpaperEngine/Render/CObject.h +++ b/src/WallpaperEngine/Render/CObject.h @@ -31,7 +31,7 @@ class CObject : public Helpers::CContextAware { virtual void render () = 0; [[nodiscard]] Wallpapers::CScene* getScene () const; - [[nodiscard]] const CContainer* getContainer () const; + [[nodiscard]] std::shared_ptr getContainer () const; [[nodiscard]] int getId () const; protected: diff --git a/src/WallpaperEngine/Render/CWallpaper.cpp b/src/WallpaperEngine/Render/CWallpaper.cpp index 770b2c2..32984fc 100644 --- a/src/WallpaperEngine/Render/CWallpaper.cpp +++ b/src/WallpaperEngine/Render/CWallpaper.cpp @@ -52,7 +52,7 @@ CWallpaper::CWallpaper ( CWallpaper::~CWallpaper () = default; -const CContainer* CWallpaper::getContainer () const { +std::shared_ptr CWallpaper::getContainer () const { return this->m_wallpaperData->getProject ().getContainer (); } @@ -260,13 +260,13 @@ std::shared_ptr CWallpaper::createFBO ( ) { std::shared_ptr fbo = std::make_shared (name, format, flags, scale, realWidth, realHeight, textureWidth, textureHeight); - this->m_fbos.insert (std::pair (name, fbo)); + this->m_fbos.emplace (name, fbo); return fbo; } void CWallpaper::aliasFBO (const std::string& alias, const std::shared_ptr& original) { - this->m_fbos.insert (std::pair (alias, original)); + this->m_fbos.emplace (alias, original); } const std::map>& CWallpaper::getFBOs () const { diff --git a/src/WallpaperEngine/Render/CWallpaper.h b/src/WallpaperEngine/Render/CWallpaper.h index 05185c8..d571ce4 100644 --- a/src/WallpaperEngine/Render/CWallpaper.h +++ b/src/WallpaperEngine/Render/CWallpaper.h @@ -59,7 +59,7 @@ class CWallpaper : public Helpers::CContextAware { /** * @return The container to resolve files for this wallpaper */ - [[nodiscard]] const CContainer* getContainer () const; + [[nodiscard]] std::shared_ptr getContainer () const; /** * @return The current audio context for this wallpaper diff --git a/src/WallpaperEngine/Render/Objects/CEffect.cpp b/src/WallpaperEngine/Render/Objects/CEffect.cpp index 36fad4e..cc62945 100644 --- a/src/WallpaperEngine/Render/Objects/CEffect.cpp +++ b/src/WallpaperEngine/Render/Objects/CEffect.cpp @@ -36,7 +36,7 @@ void CEffect::generatePasses () { void CEffect::generateFBOs () { for (const auto& cur : this->m_effect->getFbos ()) { // TODO: IS THAT DIVISION OKAY? SHOULDN'T IT BE A MULTIPLICATION? WTF? - this->m_fbos.insert (std::pair ( + this->m_fbos.emplace ( cur->getName(), new CFBO ( // TODO: SET PROPER FLAGS AND FORMAT @@ -47,7 +47,7 @@ void CEffect::generateFBOs () { this->m_image->getSize ().x / cur->getScale (), this->m_image->getSize ().y / cur->getScale () ) - )); + ); } } diff --git a/src/WallpaperEngine/Render/Objects/CImage.cpp b/src/WallpaperEngine/Render/Objects/CImage.cpp index ca6e812..a31569f 100644 --- a/src/WallpaperEngine/Render/Objects/CImage.cpp +++ b/src/WallpaperEngine/Render/Objects/CImage.cpp @@ -263,7 +263,7 @@ void CImage::setup () { if (this->m_image->getColorBlendMode () > 0) { Core::Objects::Images::CMaterial::OverrideInfo overrides; - overrides.combos.insert (std::pair ("BLENDMODE", this->m_image->getColorBlendMode ())); + overrides.combos.emplace ("BLENDMODE", this->m_image->getColorBlendMode ()); const auto material = Core::Objects::Images::CMaterial::fromFile ("materials/util/effectpassthrough.json", this->getContainer (), false, {}, &overrides); diff --git a/src/WallpaperEngine/Render/Shaders/CShader.cpp b/src/WallpaperEngine/Render/Shaders/CShader.cpp index 71c6668..3df9888 100644 --- a/src/WallpaperEngine/Render/Shaders/CShader.cpp +++ b/src/WallpaperEngine/Render/Shaders/CShader.cpp @@ -18,7 +18,7 @@ using namespace WallpaperEngine::Assets; namespace WallpaperEngine::Render::Shaders { CShader::CShader ( - const CContainer* container, std::string filename, const std::map& combos, + std::shared_ptr container, std::string filename, const std::map& combos, const std::map& textures, const std::map& constants ) : m_file (std::move (filename)), diff --git a/src/WallpaperEngine/Render/Shaders/CShader.h b/src/WallpaperEngine/Render/Shaders/CShader.h index fb587c2..8d8f94b 100644 --- a/src/WallpaperEngine/Render/Shaders/CShader.h +++ b/src/WallpaperEngine/Render/Shaders/CShader.h @@ -42,7 +42,7 @@ class CShader { * @param recursive Whether the compiler should add base definitions or not */ CShader ( - const CContainer* container, std::string filename, + std::shared_ptr container, std::string filename, const std::map& combos, const std::map& textures, const std::map& constants); /** diff --git a/src/WallpaperEngine/Render/Shaders/CShaderUnit.cpp b/src/WallpaperEngine/Render/Shaders/CShaderUnit.cpp index 4120b69..7199287 100644 --- a/src/WallpaperEngine/Render/Shaders/CShaderUnit.cpp +++ b/src/WallpaperEngine/Render/Shaders/CShaderUnit.cpp @@ -55,12 +55,14 @@ using namespace WallpaperEngine::Core; using namespace WallpaperEngine::Assets; using namespace WallpaperEngine::Render::Shaders; -CShaderUnit::CShaderUnit (CGLSLContext::UnitType type, std::string file, std::string content, - const CContainer* container, const std::map& constants, - const std::map& passTextures, const std::map& combos) : +CShaderUnit::CShaderUnit ( + CGLSLContext::UnitType type, std::string file, std::string content, std::shared_ptr container, + const std::map& constants, const std::map& passTextures, + const std::map& combos +) : m_type (type), m_link (nullptr), - m_container (container), + m_container (std::move(container)), m_file (std::move (file)), m_constants (constants), m_content (std::move(content)), @@ -334,7 +336,7 @@ void CShaderUnit::parseComboConfiguration (const std::string& content, int defau const auto entry = this->m_combos.find (combo->get ()); // add the combo to the found list - this->m_usedCombos.insert (std::pair (*combo, true)); + this->m_usedCombos.emplace (*combo, true); // if the combo was not found in the predefined values this means that the default value in the JSON data can be // used so only define the ones that are not already defined @@ -343,11 +345,11 @@ void CShaderUnit::parseComboConfiguration (const std::string& content, int defau // if no combo is defined just load the default settings if (defvalue == data.end ()) { // TODO: PROPERLY SUPPORT EMPTY COMBOS - this->m_discoveredCombos.insert (std::pair (*combo, (int) defaultValue)); + this->m_discoveredCombos.emplace (*combo, (int) defaultValue); } else if (defvalue->is_number_float ()) { sLog.exception ("float combos are not supported in shader ", this->m_file, ". ", *combo); } else if (defvalue->is_number_integer ()) { - this->m_discoveredCombos.insert (std::pair (*combo, defvalue->get ())); + this->m_discoveredCombos.emplace (*combo, defvalue->get ()); } else if (defvalue->is_string ()) { sLog.exception ("string combos are not supported in shader ", this->m_file, ". ", *combo); } else { @@ -475,16 +477,14 @@ void CShaderUnit::parseParameterConfiguration ( if (isRequired) { // add the new combo to the list - this->m_discoveredCombos.insert (std::pair (*combo, comboValue)); - + this->m_discoveredCombos.emplace (*combo, comboValue); // textures linked to combos need to be tracked too - if (this->m_usedCombos.find (*combo) == this->m_usedCombos.end ()) - this->m_usedCombos.insert (std::pair (*combo, true)); + this->m_usedCombos.emplace (*combo, true); } } if (textureName != data.end ()) - this->m_defaultTextures.insert (std::pair (index, *textureName)); + this->m_defaultTextures.emplace (index, *textureName); // samplers are not saved, we can ignore them for now return; diff --git a/src/WallpaperEngine/Render/Shaders/CShaderUnit.h b/src/WallpaperEngine/Render/Shaders/CShaderUnit.h index 9c308f1..c3c80f1 100644 --- a/src/WallpaperEngine/Render/Shaders/CShaderUnit.h +++ b/src/WallpaperEngine/Render/Shaders/CShaderUnit.h @@ -20,7 +20,8 @@ using namespace WallpaperEngine::Core::Objects::Effects::Constants; */ class CShaderUnit { public: - CShaderUnit (CGLSLContext::UnitType type, std::string file, std::string content, const CContainer* container, + CShaderUnit ( + CGLSLContext::UnitType type, std::string file, std::string content, std::shared_ptr container, const std::map& constants, const std::map& passTextures, const std::map& combos); ~CShaderUnit () = default; @@ -150,6 +151,6 @@ class CShaderUnit { /** * The container to source files from */ - const CContainer* m_container; + const std::shared_ptr m_container; }; } diff --git a/src/WallpaperEngine/Render/Wallpapers/CScene.cpp b/src/WallpaperEngine/Render/Wallpapers/CScene.cpp index 5173ac5..519c0b2 100644 --- a/src/WallpaperEngine/Render/Wallpapers/CScene.cpp +++ b/src/WallpaperEngine/Render/Wallpapers/CScene.cpp @@ -194,7 +194,7 @@ Render::CObject* CScene::createObject (const Core::CObject* object) { } if (renderObject != nullptr) - this->m_objects.insert (std::pair (renderObject->getId (), renderObject)); + this->m_objects.emplace (renderObject->getId (), renderObject); return renderObject; } diff --git a/src/WallpaperEngine/WebBrowser/CEF/CWPSchemeHandler.h b/src/WallpaperEngine/WebBrowser/CEF/CWPSchemeHandler.h index 11277ce..26ba76e 100644 --- a/src/WallpaperEngine/WebBrowser/CEF/CWPSchemeHandler.h +++ b/src/WallpaperEngine/WebBrowser/CEF/CWPSchemeHandler.h @@ -34,7 +34,7 @@ class CWPSchemeHandler : public CefResourceHandler { private: const Core::CProject* m_project; - const Assets::CContainer* m_container; + std::shared_ptr m_container; std::shared_ptr m_contents; uint32_t m_filesize; std::string m_mimeType;