From 9db3d9b0e2bd24f570142b6a815eaba05a6db86d Mon Sep 17 00:00:00 2001 From: Jiga228 Date: Fri, 22 May 2026 14:47:44 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D1=8B=D0=B9=20ModelManager.=20=D0=94=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BB=20=D1=80=D0=B5=D0=B6?= =?UTF-8?q?=D0=B8=D0=BC=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20"Engine"?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BA=D0=BE=D0=BF?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=D0=B8=D0=B8=D1=80=D1=83=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=BD=D0=B5=20bat=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=BC.=20?= =?UTF-8?q?=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20UwURenderEngine=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=80=D1=83=D0=B5=D1=82=20=D1=81=D0=B2=D0=BE?= =?UTF-8?q?=D0=B8=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/CMakeLists.txt | 41 +++++++++++++---- {Delegate => Core}/Delegate/Delegate.h | 0 {Delegate => Core/Delegate}/README.md | 0 Core/Game/ModelManager.cpp | 64 -------------------------- Core/Game/ModelManager.hpp | 35 -------------- UwURenderEngine/CMakeLists.txt | 28 ++++++++++- build_Engine.bat | 5 -- 7 files changed, 60 insertions(+), 113 deletions(-) rename {Delegate => Core}/Delegate/Delegate.h (100%) rename {Delegate => Core/Delegate}/README.md (100%) delete mode 100644 Core/Game/ModelManager.cpp delete mode 100644 Core/Game/ModelManager.hpp diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt index e1970f6..42f07e2 100644 --- a/Core/CMakeLists.txt +++ b/Core/CMakeLists.txt @@ -4,23 +4,48 @@ find_package(Vulkan REQUIRED) file(GLOB_RECURSE SRC "*.cpp" "*.c" "*.h" "*.hpp") -add_library(${CORE_NAME} STATIC ${SRC}) -target_compile_features(${CORE_NAME} PRIVATE cxx_std_17) -target_include_directories(${CORE_NAME} PUBLIC +add_library(Core STATIC ${SRC}) +target_compile_features(Core PRIVATE cxx_std_17) +target_include_directories(Core PUBLIC ${PROJECT_SOURCE_DIR}/FastRTTI - ${PROJECT_SOURCE_DIR}/Delegate ) -target_include_directories(${CORE_NAME} +target_include_directories(Core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/glfw/Include - ${PROJECT_SOURCE_DIR}/RenderEngineSDK + ${PROJECT_SOURCE_DIR}/RenderEngineSDK ${Vulkan_INCLUDE_DIRS} ) -target_link_libraries(${CORE_NAME} PRIVATE +target_link_libraries(Core PRIVATE ${CMAKE_DL_LIBS} # For linux FastRTTI glfw Vulkan::Vulkan -) \ No newline at end of file +) + +file(GLOB_RECURSE HEADERS + "${CMAKE_CURRENT_SOURCE_DIR}/*.h" + "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" +) + +foreach (HEADER ${HEADERS}) + file(RELATIVE_PATH R_PATH + "${CMAKE_CURRENT_SOURCE_DIR}" + "${HEADER}" + ) + + get_filename_component(HEADER_DIR ${R_PATH} DIRECTORY) + + add_custom_command( + TARGET Core + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/include/${HEADER_DIR}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${HEADER}" + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/include/${R_PATH}" + + COMMENT "Copy Core headers" + ) +endforeach () \ No newline at end of file diff --git a/Delegate/Delegate/Delegate.h b/Core/Delegate/Delegate.h similarity index 100% rename from Delegate/Delegate/Delegate.h rename to Core/Delegate/Delegate.h diff --git a/Delegate/README.md b/Core/Delegate/README.md similarity index 100% rename from Delegate/README.md rename to Core/Delegate/README.md diff --git a/Core/Game/ModelManager.cpp b/Core/Game/ModelManager.cpp deleted file mode 100644 index e48eb0f..0000000 --- a/Core/Game/ModelManager.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "ModelManager.hpp" - -#include "Log/Log.hpp" - -ModelManager::owner_counter::owner_counter(const owner_counter& other) : counter(other.counter.load()), model(other.model) -{ -} - -unsigned int ModelManager::FNV1aHash(const char* buf) -{ - unsigned int h_val = 0x811c9dc5; - - while (*buf) - { - h_val ^= static_cast(*buf++); - h_val *= 0x01000193; - } - - return h_val; -} - -ModelManager::~ModelManager() -{ - models.clear(); -} - -ModelManager::StaticModel* ModelManager::LoadModel(const std::string& name) -{ - if (name.empty()) - return nullptr; - unsigned int hash = FNV1aHash(name.c_str()); - auto counter = models.find(hash); - if (counter != models.cend()) - { - ++counter->second.counter; - return counter->second.model; - } - - Loging::Log("Load new model: " + name); - - // Load model_data - owner_counter new_counter; - new_counter.counter.store(1); - new_counter.model = new StaticModel(); - models.try_emplace(hash, new_counter); - return new_counter.model; -} - -void ModelManager::FreeModel(const std::string& name) -{ - if (name.empty()) - return; - - unsigned int hash = FNV1aHash(name.c_str()); - auto counter = models.find(hash); - --counter->second.counter; - - StaticModel* model = counter->second.model; - if (counter->second.counter.load() == 0) - { - models.erase(hash); - delete model; - } -} diff --git a/Core/Game/ModelManager.hpp b/Core/Game/ModelManager.hpp deleted file mode 100644 index fba7e57..0000000 --- a/Core/Game/ModelManager.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include -#include -#include - -class ModelManager -{ -public: - class StaticModel - { - //DATA - }; - - struct owner_counter - { - std::atomic_ullong counter; - StaticModel* model; - - owner_counter() = default; - owner_counter(const owner_counter& other); - }; - -private: - - std::unordered_map models; - - static unsigned int FNV1aHash (const char *buf); - -public: - ~ModelManager(); - - StaticModel* LoadModel(const std::string& name); - void FreeModel(const std::string& name); -}; \ No newline at end of file diff --git a/UwURenderEngine/CMakeLists.txt b/UwURenderEngine/CMakeLists.txt index 653b0c0..7a59b66 100644 --- a/UwURenderEngine/CMakeLists.txt +++ b/UwURenderEngine/CMakeLists.txt @@ -4,4 +4,30 @@ add_library(UwURenderEngine ${SRC}) target_include_directories(UwURenderEngine PUBLIC ${PROJECT_SOURCE_DIR}/RenderEngineSDK) target_link_libraries(UwURenderEngine PUBLIC RenderEngineSDK) -target_compile_features(UwURenderEngine PRIVATE cxx_std_17) \ No newline at end of file +target_compile_features(UwURenderEngine PRIVATE cxx_std_17) + +file(GLOB_RECURSE HEADERS + "${CMAKE_CURRENT_SOURCE_DIR}/*.h" + "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" +) + +foreach (HEADER ${HEADERS}) + file(RELATIVE_PATH R_PATH + "${CMAKE_CURRENT_SOURCE_DIR}/" + "${HEADER}" + ) + + get_filename_component(HEADER_DIR "${R_PATH}" DIRECTORY) + + add_custom_command( + TARGET UwURenderEngine + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/include/${HEADER_DIR}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${HEADER}" + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/include/${R_PATH}" + + COMMENT "Copy UwURenderEngine headers" + ) +endforeach () \ No newline at end of file diff --git a/build_Engine.bat b/build_Engine.bat index d6cbf48..93c5734 100644 --- a/build_Engine.bat +++ b/build_Engine.bat @@ -3,9 +3,4 @@ mkdir .\build cd build cmake -DBUILD_MODE=Engine .. cmake --build . --config Release -cd .. -mkdir ".\build\bin\include" -robocopy ".\Core" ".\build\bin\include\Core" *.h *.hpp /S -robocopy ".\Delegate" ".\build\bin\include\Delegate" *.h *.hpp /S -robocopy ".\FastRTTI" ".\build\bin\include\FastRTTI" *.h *.hpp /S pause \ No newline at end of file