diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ad81b9..7121b05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,7 +94,7 @@ endif() list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) -target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp fmt spdlog glm pugixml stb eigen utf8cpp imgui_internal TracyClient stud-uuid) +target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp fmt spdlog glm pugixml stb eigen utf8cpp imgui_internal TracyClient stud-uuid ryml) add_compile_definitions(LIBARCHIVE_STATIC) add_compile_definitions(NOMINMAX) diff --git a/openVulkanoCpp/Base/EngineConfiguration.cpp b/openVulkanoCpp/Base/EngineConfiguration.cpp new file mode 100644 index 0000000..6045606 --- /dev/null +++ b/openVulkanoCpp/Base/EngineConfiguration.cpp @@ -0,0 +1,60 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +#include +#include +#include +#include + +#include "EngineConfiguration.hpp" +#include "IO/AppFolders.hpp" +#include "Utils.hpp" + +namespace OpenVulkano +{ + namespace + { + const char *NUM_THREADS_STR = "num_threads"; + const char *FRAMEBUFFER_CLEAR_COLOR_STR = "framebuffer_clear_color"; + const char *PREFER_FRAMEBUFFER_FORMAT_SRGB_STR = "prefer_framebuffer_format_srgb"; + } + + EngineConfiguration::EngineConfiguration() + { + const std::string filePath = (AppFolders::GetAppConfigHomeDir() / "EngineConfig.yml").string(); + Array fileContents = Utils::ReadFile(filePath, true); + if(fileContents.Size() == 0) + return; + + ryml::Tree tree = ryml::parse_in_arena(ryml::to_csubstr(fileContents.Data())); + ryml::NodeRef root = tree.rootref(); + + if (root.has_child(NUM_THREADS_STR) && root[NUM_THREADS_STR].val().is_integer()) + { + root[NUM_THREADS_STR] >> m_numThreads; + } + + if (root.has_child(FRAMEBUFFER_CLEAR_COLOR_STR) && root[FRAMEBUFFER_CLEAR_COLOR_STR].is_seq() && root[FRAMEBUFFER_CLEAR_COLOR_STR].num_children() == 4) + { + auto clearColorNode = root[FRAMEBUFFER_CLEAR_COLOR_STR]; + for (size_t i = 0; i < 4; ++i) + { + clearColorNode[i] >> m_frameBufferClearColor[i]; + } + } + + if (root.has_child(PREFER_FRAMEBUFFER_FORMAT_SRGB_STR)) + { + root[PREFER_FRAMEBUFFER_FORMAT_SRGB_STR] >> m_preferFramebufferFormatSRGB; + } + } + + EngineConfiguration* EngineConfiguration::GetEngineConfiguration() + { + static EngineConfiguration config; + return &config; + } +} \ No newline at end of file diff --git a/openVulkanoCpp/Base/EngineConfiguration.hpp b/openVulkanoCpp/Base/EngineConfiguration.hpp index 867a522..8a926b4 100644 --- a/openVulkanoCpp/Base/EngineConfiguration.hpp +++ b/openVulkanoCpp/Base/EngineConfiguration.hpp @@ -8,6 +8,7 @@ #include #include +#include #undef max namespace OpenVulkano @@ -15,7 +16,7 @@ namespace OpenVulkano class EngineConfiguration { private: - EngineConfiguration() = default; + EngineConfiguration(); ~EngineConfiguration() = default; uint32_t m_numThreads = 1; @@ -23,40 +24,15 @@ namespace OpenVulkano bool m_preferFramebufferFormatSRGB = true; public: - [[nodiscard]] static EngineConfiguration* GetEngineConfiguration() - { - static EngineConfiguration config; - return &config; - } + [[nodiscard]] static EngineConfiguration* GetEngineConfiguration(); - void SetNumThreads(uint32_t numThreads) - { - m_numThreads = numThreads; - } - - [[nodiscard]] uint32_t GetNumThreads() const - { - return std::max(static_cast(1), m_numThreads); - } - - void SetFrameBufferClearColor(std::array frameBufferClearColor) - { - m_frameBufferClearColor = frameBufferClearColor; - } - - [[nodiscard]] const std::array& GetFrameBufferClearColor() const - { - return m_frameBufferClearColor; - } - - [[nodiscard]] bool GetPreferFramebufferFormatSRGB() const - { - return m_preferFramebufferFormatSRGB; - } - - void SetPreferFramebufferFormatSRGB(bool sRGB) - { - m_preferFramebufferFormatSRGB = sRGB; - } + void SetNumThreads(uint32_t numThreads) { m_numThreads = numThreads; } + [[nodiscard]] uint32_t GetNumThreads() const { return std::max(static_cast(1), m_numThreads); } + + void SetFrameBufferClearColor(std::array frameBufferClearColor) { m_frameBufferClearColor = frameBufferClearColor; } + [[nodiscard]] const std::array& GetFrameBufferClearColor() const { return m_frameBufferClearColor; } + + [[nodiscard]] bool GetPreferFramebufferFormatSRGB() const {return m_preferFramebufferFormatSRGB; } + void SetPreferFramebufferFormatSRGB(bool sRGB) { m_preferFramebufferFormatSRGB = sRGB; } }; } \ No newline at end of file