diff --git a/CMakeLists.txt b/CMakeLists.txt index e47ad63..3bbeae7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -351,9 +351,6 @@ add_executable( src/WallpaperEngine/WebBrowser/CWebBrowserContext.cpp src/WallpaperEngine/WebBrowser/CWebBrowserContext.h - src/WallpaperEngine/FileSystem/FileSystem.cpp - src/WallpaperEngine/FileSystem/FileSystem.h - src/WallpaperEngine/Core/UserSettings/CUserSettingValue.cpp src/WallpaperEngine/Core/UserSettings/CUserSettingValue.h src/WallpaperEngine/Core/UserSettings/CUserSettingBoolean.cpp diff --git a/src/WallpaperEngine/Assets/CContainer.cpp b/src/WallpaperEngine/Assets/CContainer.cpp index 1223f3d..e8627a5 100644 --- a/src/WallpaperEngine/Assets/CContainer.cpp +++ b/src/WallpaperEngine/Assets/CContainer.cpp @@ -17,7 +17,7 @@ const ITexture* CContainer::readTexture (const std::string& filename) const { // get the texture's filename (usually .tex) const std::string texture = "materials/" + filename + ".tex"; - const void* textureContents = this->readFile (texture, nullptr); + const uint8_t* textureContents = this->readFile (texture, nullptr); const ITexture* result = new CTexture (textureContents); @@ -25,6 +25,8 @@ const ITexture* CContainer::readTexture (const std::string& filename) const { glObjectLabel (GL_TEXTURE, result->getTextureID (), -1, texture.c_str ()); #endif /* NDEBUG */ + delete textureContents; + return result; } @@ -37,7 +39,7 @@ std::string CContainer::readShader (const std::string& filename) const { const std::filesystem::path workshopId = *it++; if (++it != shader.end ()) { - const std::filesystem::path shaderfile = *it; + const std::filesystem::path& shaderfile = *it; try { shader = std::filesystem::path ("zcompat") / "scene" / "shaders" / workshopId / shaderfile; @@ -82,6 +84,7 @@ std::string CContainer::readFileAsString (const std::string& filename) const { // free the intermediate buffer used to generate the std::string delete [] buffer; + delete contents; return result; } \ No newline at end of file diff --git a/src/WallpaperEngine/Assets/CContainer.h b/src/WallpaperEngine/Assets/CContainer.h index 4827512..cd2caa7 100644 --- a/src/WallpaperEngine/Assets/CContainer.h +++ b/src/WallpaperEngine/Assets/CContainer.h @@ -25,6 +25,8 @@ class CContainer { * Reads the given file from the container and returns it's data * Additionally sets a length parameter to return back the file's length * + * The returned string must be freed by the called + * * @param filename The file to read * @param length The file's length after it's been read, null for not getting anything back * diff --git a/src/WallpaperEngine/Core/CProject.cpp b/src/WallpaperEngine/Core/CProject.cpp index 5c4dd37..712c34b 100644 --- a/src/WallpaperEngine/Core/CProject.cpp +++ b/src/WallpaperEngine/Core/CProject.cpp @@ -1,6 +1,5 @@ #include "common.h" #include -#include #include "CProject.h" #include "WallpaperEngine/Core/Wallpapers/CScene.h" @@ -17,7 +16,7 @@ CProject::CProject (std::string title, std::string type, CContainer* container) m_container (container) {} CProject* CProject::fromFile (const std::string& filename, CContainer* container) { - json content = json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container)); + json content = json::parse (container->readFileAsString (filename)); std::string dependency = jsonFindDefault (content, "dependency", "No dependency"); if (dependency == "No dependency") { diff --git a/src/WallpaperEngine/Core/Objects/CEffect.cpp b/src/WallpaperEngine/Core/Objects/CEffect.cpp index 4e820f9..0efc11b 100644 --- a/src/WallpaperEngine/Core/Objects/CEffect.cpp +++ b/src/WallpaperEngine/Core/Objects/CEffect.cpp @@ -14,8 +14,6 @@ #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" -#include "WallpaperEngine/FileSystem/FileSystem.h" - using namespace WallpaperEngine; using namespace WallpaperEngine::Core::Objects; using namespace WallpaperEngine::Core::UserSettings; @@ -33,7 +31,7 @@ CEffect* CEffect::fromJSON (json data, CUserSettingBoolean* visible, CObject* ob auto file_it = jsonFindRequired (data, "file", "Object effect must have a file"); auto effectpasses_it = data.find ("passes"); - json content = json::parse (WallpaperEngine::FileSystem::loadFullFile (file_it->get (), container)); + json content = json::parse (container->readFileAsString(file_it->get ())); auto name_it = jsonFindRequired (content, "name", "Effect must have a name"); auto description = jsonFindDefault (content, "description", ""); diff --git a/src/WallpaperEngine/Core/Objects/CImage.cpp b/src/WallpaperEngine/Core/Objects/CImage.cpp index 36b96bd..01e10c3 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.cpp +++ b/src/WallpaperEngine/Core/Objects/CImage.cpp @@ -7,8 +7,6 @@ #include "WallpaperEngine/Core/Wallpapers/CScene.h" #include -#include "WallpaperEngine/FileSystem/FileSystem.h" - using namespace WallpaperEngine::Core::Objects; using namespace WallpaperEngine::Core::UserSettings; @@ -43,7 +41,7 @@ WallpaperEngine::Core::CObject* CImage::fromJSON (CScene* scene, json data, CCon const auto colorBlendMode_val = jsonFindDefault (data, "colorBlendMode", 0); const auto parallaxDepth_val = jsonFindDefault (data, "parallaxDepth", "0 0"); - json content = json::parse (WallpaperEngine::FileSystem::loadFullFile (image_it->get (), container)); + json content = json::parse (container->readFileAsString (image_it->get ())); const auto material_it = jsonFindRequired (content, "material", "Image must have a material"); const auto fullscreen = jsonFindDefault (content, "fullscreen", false); diff --git a/src/WallpaperEngine/Core/Objects/CParticle.cpp b/src/WallpaperEngine/Core/Objects/CParticle.cpp index 5bdd6ce..725f0b5 100644 --- a/src/WallpaperEngine/Core/Objects/CParticle.cpp +++ b/src/WallpaperEngine/Core/Objects/CParticle.cpp @@ -1,6 +1,5 @@ #include "CParticle.h" -#include "WallpaperEngine/FileSystem/FileSystem.h" #include using namespace WallpaperEngine::Core::Objects; @@ -8,7 +7,7 @@ using namespace WallpaperEngine::Core::Objects; CParticle* CParticle::fromFile (CScene* scene, const std::string& filename, CContainer* container, CUserSettingBoolean* visible, int id, std::string name, CUserSettingVector3* origin, CUserSettingVector3* scale) { - json data = json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container)); + json data = json::parse (container->readFileAsString (filename)); const auto controlpoint_it = data.find ("controlpoint"); const auto starttime_it = jsonFindRequired (data, "starttime", "Particles must have start time"); const auto maxcount_it = jsonFindRequired (data, "maxcount", "Particles must have maximum count"); diff --git a/src/WallpaperEngine/Core/Objects/Images/CMaterial.cpp b/src/WallpaperEngine/Core/Objects/Images/CMaterial.cpp index e76ad57..ab6c046 100644 --- a/src/WallpaperEngine/Core/Objects/Images/CMaterial.cpp +++ b/src/WallpaperEngine/Core/Objects/Images/CMaterial.cpp @@ -3,8 +3,6 @@ #include #include -#include "WallpaperEngine/FileSystem/FileSystem.h" - using namespace WallpaperEngine::Assets; using namespace WallpaperEngine::Core::Objects; @@ -13,11 +11,11 @@ using namespace WallpaperEngine::Core::Objects::Images; CMaterial::CMaterial (std::string name) : m_name (std::move (name)) {} CMaterial* CMaterial::fromFile (const std::string& filename, CContainer* container) { - return fromJSON (filename, json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container))); + return fromJSON (filename, json::parse (container->readFileAsString (filename))); } CMaterial* CMaterial::fromFile (const std::string& filename, const std::string& target, CContainer* container) { - return fromJSON (filename, json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container)), target); + return fromJSON (filename, json::parse (container->readFileAsString (filename)), target); } CMaterial* CMaterial::fromJSON (const std::string& name, json data, const std::string& target) { diff --git a/src/WallpaperEngine/Core/Wallpapers/CScene.cpp b/src/WallpaperEngine/Core/Wallpapers/CScene.cpp index e7cce34..5dd35c9 100644 --- a/src/WallpaperEngine/Core/Wallpapers/CScene.cpp +++ b/src/WallpaperEngine/Core/Wallpapers/CScene.cpp @@ -4,7 +4,6 @@ #include "WallpaperEngine/Core/UserSettings/CUserSettingBoolean.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingFloat.h" #include "WallpaperEngine/Core/UserSettings/CUserSettingVector3.h" -#include "WallpaperEngine/FileSystem/FileSystem.h" using namespace WallpaperEngine::Core; @@ -36,8 +35,7 @@ CScene::CScene (CProject& project, CContainer* container, Scenes::CCamera* camer m_skylightColor (skylightColor) {} CScene* CScene::fromFile (const std::string& filename, CProject& project, CContainer* container) { - std::string stringContent = WallpaperEngine::FileSystem::loadFullFile (filename, container); - json content = json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container)); + json content = json::parse (container->readFileAsString (filename)); const auto camera_it = jsonFindRequired (content, "camera", "Scenes must have a defined camera"); const auto general_it = jsonFindRequired (content, "general", "Scenes must have a general section"); diff --git a/src/WallpaperEngine/FileSystem/FileSystem.cpp b/src/WallpaperEngine/FileSystem/FileSystem.cpp deleted file mode 100644 index 92c099b..0000000 --- a/src/WallpaperEngine/FileSystem/FileSystem.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// filesystem includes -#include "FileSystem.h" - -#include - -using namespace WallpaperEngine; - -std::string FileSystem::loadFullFile (const std::string& file, const WallpaperEngine::Assets::CContainer* containers) { - uint32_t length = 0; - const void* contents = containers->readFile (file, &length); - - // build a new buffer that can fit in the string - char* filedata = new char [length + 1]; - // ensure there's a null termination at the end - memset (filedata, 0, length + 1); - // copy file contents over - memcpy (filedata, contents, length); - - std::string content = filedata; - - delete [] filedata; - - return content; -} \ No newline at end of file diff --git a/src/WallpaperEngine/FileSystem/FileSystem.h b/src/WallpaperEngine/FileSystem/FileSystem.h deleted file mode 100644 index c7fe214..0000000 --- a/src/WallpaperEngine/FileSystem/FileSystem.h +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @author Alexis Maiquez Murcia - */ -#pragma once - -#include -#include -#include - -#include "WallpaperEngine/Assets/CContainer.h" - -namespace WallpaperEngine::FileSystem { -/** - * Loads a full file into an std::string - * - * @param file - * @param containers - * @return - */ -std::string loadFullFile (const std::string& file, const WallpaperEngine::Assets::CContainer* containers); -} // namespace WallpaperEngine::FileSystem diff --git a/src/WallpaperEngine/Render/Objects/CSound.cpp b/src/WallpaperEngine/Render/Objects/CSound.cpp index 413c240..4321f51 100644 --- a/src/WallpaperEngine/Render/Objects/CSound.cpp +++ b/src/WallpaperEngine/Render/Objects/CSound.cpp @@ -9,6 +9,17 @@ CSound::CSound (CScene* scene, Core::Objects::CSound* sound) : CObject (scene, T this->load (); } +CSound::~CSound() { + // free all the sound buffers and streams + for (const auto& stream : this->m_audioStreams) { + delete stream; + } + + for (const auto& buffer : this->m_soundBuffer) { + delete buffer; + } +} + void CSound::load () { for (const auto& cur : this->m_sound->getSounds ()) { uint32_t filesize = 0; diff --git a/src/WallpaperEngine/Render/Objects/CSound.h b/src/WallpaperEngine/Render/Objects/CSound.h index 8307e61..9ea7142 100644 --- a/src/WallpaperEngine/Render/Objects/CSound.h +++ b/src/WallpaperEngine/Render/Objects/CSound.h @@ -11,6 +11,7 @@ namespace WallpaperEngine::Render::Objects { class CSound final : public CObject { public: CSound (CScene* scene, Core::Objects::CSound* sound); + ~CSound (); void render () override; diff --git a/src/WallpaperEngine/Render/Shaders/CCompiler.cpp b/src/WallpaperEngine/Render/Shaders/CCompiler.cpp index 104f7ac..57d0e5c 100644 --- a/src/WallpaperEngine/Render/Shaders/CCompiler.cpp +++ b/src/WallpaperEngine/Render/Shaders/CCompiler.cpp @@ -4,9 +4,6 @@ #include #include -// filesystem -#include - // shader compiler #include #include diff --git a/src/WallpaperEngine/Render/Shaders/CCompiler.h b/src/WallpaperEngine/Render/Shaders/CCompiler.h index 49792d5..f77af3e 100644 --- a/src/WallpaperEngine/Render/Shaders/CCompiler.h +++ b/src/WallpaperEngine/Render/Shaders/CCompiler.h @@ -8,7 +8,6 @@ #include "WallpaperEngine/Assets/ITexture.h" #include "WallpaperEngine/Core/Core.h" #include "WallpaperEngine/Core/Objects/Effects/Constants/CShaderConstant.h" -#include "WallpaperEngine/FileSystem/FileSystem.h" #include "WallpaperEngine/Render/Shaders/Variables/CShaderVariable.h" #include "CGLSLContext.h"