From 0ff3a35ed35364b1f80962a81f780ccd4d182417 Mon Sep 17 00:00:00 2001 From: legatt Date: Sun, 18 Jan 2026 20:47:45 +0300 Subject: [PATCH] Refactor and Magnum integration --- CMakeLists.txt | 8 +- assets/materials/helloworld.mat | Bin 16 -> 0 bytes assets/shaders/helloworld.frag.spv | Bin 608 -> 0 bytes assets/shaders/helloworld.vert.spv | Bin 1812 -> 0 bytes engine-api/CMakeLists.txt | 31 +++++ .../include/ee_engine_api/RenderInterface.hpp | 22 ++++ engine-api/src/RenderInterface.cpp | 26 ++++ engine/CMakeLists.txt | 2 + engine/include/AssetData.hpp | 8 +- engine/include/AssetManager.hpp | 8 +- engine/include/Engine.hpp | 4 +- engine/include/RenderInterface.hpp | 53 -------- engine/include/compile_config.hpp | 6 +- engine/src/AssetData.cpp | 6 +- engine/src/AssetManager.cpp | 18 +-- engine/src/FileSystem.cpp | 2 +- engine/src/RenderInterface.cpp | 119 ------------------ engine/src/main.cpp | 31 +++-- renderers/magnum-renderer/CMakeLists.txt | 57 +++++++++ .../include/ee_magnum/Renderer.hpp | 26 ++++ renderers/magnum-renderer/src/Renderer.cpp | 58 +++++++++ {ECSAPI => server}/.vscode/launch.json | 0 {ECSAPI => server}/CMakeLists.txt | 10 +- .../Economy => server/economy}/CMakeLists.txt | 0 .../ee_economy/components/container.hpp | 0 .../ee_economy/components/deliverer.hpp | 0 .../ee_economy/components/enterprise.hpp | 0 .../include/ee_economy/components/miner.hpp | 0 .../ee_economy/components/producer.hpp | 0 .../include/ee_economy/components/state.hpp | 0 .../include/ee_economy/components/tags.hpp | 0 .../economy}/include/ee_economy/defines.hpp | 0 .../economy}/include/ee_economy/economy.hpp | 0 .../ee_economy/enterprise_defaults.hpp | 0 .../include/ee_economy/resources_exchange.hpp | 0 .../economy}/include/ee_economy/systems.hpp | 0 .../economy}/src/Economy.cpp | 0 .../economy}/src/systems/delivering.cpp | 0 .../src/systems/enterprise_routine.cpp | 0 .../economy}/src/systems/mining.cpp | 0 .../economy}/test/CMakeLists.txt | 0 {ECSAPI/ECS => server/economy}/test/main.cpp | 0 .../economy}/test/systems/delivering.cpp | 0 .../test/systems/enterprise_routine.cpp | 0 .../economy}/test/systems/mining.cpp | 0 .../economy}/test/test_conf.hpp | 0 {ECSAPI/ECS => server/ecs}/CMakeLists.txt | 0 .../ECS => server/ecs}/include/ee_ecs/api.hpp | 0 .../ecs}/include/ee_ecs/data.hpp | 0 .../ECS => server/ecs}/include/ee_ecs/ecs.hpp | 0 .../ecs}/include/ee_ecs/world.hpp | 0 {ECSAPI/ECS => server/ecs}/src/api.cpp | 0 {ECSAPI/ECS => server/ecs}/src/world.cpp | 0 .../ECS => server/ecs}/test/CMakeLists.txt | 0 {ECSAPI/ECS => server/ecs}/test/benchmark.cpp | 0 {ECSAPI/Economy => server/ecs}/test/main.cpp | 0 {ECSAPI/ECS => server/ecs}/test/test_conf.hpp | 0 {ECSAPI/ECS => server/ecs}/test/world.cpp | 0 utils/CMakeLists.txt | 26 +++- utils/include/{ => ee_utils}/allocator.hpp | 0 utils/src/utils.cpp | 0 vcpkg.json | 1 + 62 files changed, 303 insertions(+), 219 deletions(-) delete mode 100644 assets/materials/helloworld.mat delete mode 100644 assets/shaders/helloworld.frag.spv delete mode 100644 assets/shaders/helloworld.vert.spv create mode 100644 engine-api/CMakeLists.txt create mode 100644 engine-api/include/ee_engine_api/RenderInterface.hpp create mode 100644 engine-api/src/RenderInterface.cpp delete mode 100644 engine/include/RenderInterface.hpp delete mode 100644 engine/src/RenderInterface.cpp create mode 100644 renderers/magnum-renderer/CMakeLists.txt create mode 100644 renderers/magnum-renderer/include/ee_magnum/Renderer.hpp create mode 100644 renderers/magnum-renderer/src/Renderer.cpp rename {ECSAPI => server}/.vscode/launch.json (100%) rename {ECSAPI => server}/CMakeLists.txt (74%) rename {ECSAPI/Economy => server/economy}/CMakeLists.txt (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/components/container.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/components/deliverer.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/components/enterprise.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/components/miner.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/components/producer.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/components/state.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/components/tags.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/defines.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/economy.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/enterprise_defaults.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/resources_exchange.hpp (100%) rename {ECSAPI/Economy => server/economy}/include/ee_economy/systems.hpp (100%) rename {ECSAPI/Economy => server/economy}/src/Economy.cpp (100%) rename {ECSAPI/Economy => server/economy}/src/systems/delivering.cpp (100%) rename {ECSAPI/Economy => server/economy}/src/systems/enterprise_routine.cpp (100%) rename {ECSAPI/Economy => server/economy}/src/systems/mining.cpp (100%) rename {ECSAPI/Economy => server/economy}/test/CMakeLists.txt (100%) rename {ECSAPI/ECS => server/economy}/test/main.cpp (100%) rename {ECSAPI/Economy => server/economy}/test/systems/delivering.cpp (100%) rename {ECSAPI/Economy => server/economy}/test/systems/enterprise_routine.cpp (100%) rename {ECSAPI/Economy => server/economy}/test/systems/mining.cpp (100%) rename {ECSAPI/Economy => server/economy}/test/test_conf.hpp (100%) rename {ECSAPI/ECS => server/ecs}/CMakeLists.txt (100%) rename {ECSAPI/ECS => server/ecs}/include/ee_ecs/api.hpp (100%) rename {ECSAPI/ECS => server/ecs}/include/ee_ecs/data.hpp (100%) rename {ECSAPI/ECS => server/ecs}/include/ee_ecs/ecs.hpp (100%) rename {ECSAPI/ECS => server/ecs}/include/ee_ecs/world.hpp (100%) rename {ECSAPI/ECS => server/ecs}/src/api.cpp (100%) rename {ECSAPI/ECS => server/ecs}/src/world.cpp (100%) rename {ECSAPI/ECS => server/ecs}/test/CMakeLists.txt (100%) rename {ECSAPI/ECS => server/ecs}/test/benchmark.cpp (100%) rename {ECSAPI/Economy => server/ecs}/test/main.cpp (100%) rename {ECSAPI/ECS => server/ecs}/test/test_conf.hpp (100%) rename {ECSAPI/ECS => server/ecs}/test/world.cpp (100%) rename utils/include/{ => ee_utils}/allocator.hpp (100%) create mode 100644 utils/src/utils.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 97b4988..5388d28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,8 @@ project (EtrediaEmpires) add_subdirectory(sdk/materials) add_subdirectory(utils) -add_subdirectory (p7lib) -add_subdirectory (ECSAPI) -add_subdirectory (engine) \ No newline at end of file +add_subdirectory(p7lib) +add_subdirectory(server) +add_subdirectory(engine-api) +add_subdirectory(renderers/magnum-renderer) +add_subdirectory(engine) \ No newline at end of file diff --git a/assets/materials/helloworld.mat b/assets/materials/helloworld.mat deleted file mode 100644 index b258151de8ba8aac3251d82fa77f7c861d3662c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 Wcmd;mw6Q{8MKb(eijouq5C8x$rvzF6 diff --git a/assets/shaders/helloworld.frag.spv b/assets/shaders/helloworld.frag.spv deleted file mode 100644 index a6765af36224cbef703715b364693cf4475d0403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmYk2-Acni5QWF4X=`i$Ea;t7ycCKTDuSq}NNxi4=K+?Othy4DkfeflKATVFjo>+J zB3YQs&e?Bw&ctc$bw$=>AVZnS-g-dM^p06(NuT-J4AP-8dikBeLxk?{jbyyZ;`eeN2((`Xr zm}ROcKVq$7lV}y09F%$2CF|_`b$^kbsDEREJ1Ot-={oyu0;>G zIL8hFEY_TNBy*_*@GJSJ~DaM|@;s-Hb9CiAJo|ym6T~ki5<8&) diff --git a/assets/shaders/helloworld.vert.spv b/assets/shaders/helloworld.vert.spv deleted file mode 100644 index 4062a52f5ade3614b80355199b9356cc9556f7b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1812 zcmZ9L+fLL_6oxA^0|){la!_%c0naFcr#Y;M=}d+eJCXF{?pc_3Mr)buwb{YwRP<+~kkJTP`;qQSHCJa%`G_=lTu7$R8?3dGer;F9-m zs{)&2wZ)hl3~e!Lz~IMX*kJ67-tbcNE;y2_TZ(*Q9DTUXc?mr%##=bsCAZvLt;7Gn z4vf0j61U{GEt_NgrNYf;gI7D7<=Ea~{puYSv$N5YJ#YtiTmRo3^?aVDVjSY^qw24h zKJ_!2hI!iJ4IZ)QWDQHVB=f3g9(?$n)$gcuOTt+xeg2c_wDG6smKKr9Db2atL9>Ea$Uy$ZK;Pl7m+Xu7#F3P4q z`Lkt=`lhCUd)sTVjDgV$pFPkEj@r_^8J}KD()0x,$>,$<$:EditAndContinue>,$<$:ProgramDatabase>>") +endif() + +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + + +project(engine-api) + +file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS + "src/*.cpp" + "src/*.c" + "include/*.hpp" + "include/*.h" +) + + +# Find dependencies + +find_package(glfw3 CONFIG REQUIRED) + +# Link library + +add_library(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} PUBLIC utils) +target_link_libraries(${PROJECT_NAME} PRIVATE glfw) + +target_include_directories(${PROJECT_NAME} PUBLIC include/) \ No newline at end of file diff --git a/engine-api/include/ee_engine_api/RenderInterface.hpp b/engine-api/include/ee_engine_api/RenderInterface.hpp new file mode 100644 index 0000000..d6f7327 --- /dev/null +++ b/engine-api/include/ee_engine_api/RenderInterface.hpp @@ -0,0 +1,22 @@ +#pragma once +#include + +class IRenderer +{ +public: + virtual ~IRenderer(); + + void Draw(); + virtual void ResizeWindow(int width, int height); + +protected: + int screenWidth, screenHeight; + + GLFWwindow *window; + + explicit IRenderer(GLFWwindow *window); + + virtual void Clear() = 0; + virtual void DrawMap() = 0; + virtual void DrawUI() = 0; +}; \ No newline at end of file diff --git a/engine-api/src/RenderInterface.cpp b/engine-api/src/RenderInterface.cpp new file mode 100644 index 0000000..acfdf35 --- /dev/null +++ b/engine-api/src/RenderInterface.cpp @@ -0,0 +1,26 @@ +#include +#include + +IRenderer::IRenderer(GLFWwindow *window) +{ + this->window = window; + glfwGetFramebufferSize(window, &screenWidth, &screenHeight); +} + +IRenderer::~IRenderer() +{ + +} + +void IRenderer::Draw() +{ + Clear(); + DrawMap(); + DrawUI(); +} + +void IRenderer::ResizeWindow(int width, int height) +{ + screenWidth = width; + screenHeight = height; +} \ No newline at end of file diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 9965475..ec6b868 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -31,6 +31,8 @@ find_package(glfw3 CONFIG REQUIRED) add_executable(${PROJECT_NAME} ${SOURCES}) target_link_libraries(${PROJECT_NAME} PUBLIC utils) +target_link_libraries(${PROJECT_NAME} PUBLIC engine-api) +target_link_libraries(${PROJECT_NAME} PUBLIC magnum-renderer) target_link_libraries(${PROJECT_NAME} PRIVATE Boost::lockfree) target_link_libraries(${PROJECT_NAME} PRIVATE xxHash::xxhash) diff --git a/engine/include/AssetData.hpp b/engine/include/AssetData.hpp index 32886f4..4f8100a 100644 --- a/engine/include/AssetData.hpp +++ b/engine/include/AssetData.hpp @@ -14,16 +14,16 @@ struct AssetBinary : AssetData ~AssetBinary(); }; -struct AssetShader : AssetData +struct AssetVulkanShader : AssetData { uint32_t* content = nullptr; size_t size = 0; - AssetShader(uint8_t* &source, const size_t &sourceSize); - ~AssetShader(); + AssetVulkanShader(uint8_t* &source, const size_t &sourceSize); + ~AssetVulkanShader(); }; -struct AssetMaterial : AssetData +struct AssetVulkanMaterial : AssetData { uint32_t vertexShaderAssetID; uint32_t fragmentShaderAssetID; diff --git a/engine/include/AssetManager.hpp b/engine/include/AssetManager.hpp index a6450b0..026b2c1 100644 --- a/engine/include/AssetManager.hpp +++ b/engine/include/AssetManager.hpp @@ -30,8 +30,8 @@ public: { BINARY, - SHADER, - MATERIAL, + VULKAN_SHADER, + VULKAN_MATERIAL, IMAGE } type = BINARY; @@ -108,8 +108,8 @@ private: std::vector loadingEntries; std::vector binaryStorage; - std::vector shadersStorage; - std::vector materialsStorage; + std::vector shadersStorage; + std::vector materialsStorage; void Threading(); void Request(const AssetStreamCommand &command); diff --git a/engine/include/Engine.hpp b/engine/include/Engine.hpp index e637398..b056976 100644 --- a/engine/include/Engine.hpp +++ b/engine/include/Engine.hpp @@ -1,6 +1,8 @@ #pragma once + +#include + #include "AssetManager.hpp" -#include "RenderInterface.hpp" class Engine { diff --git a/engine/include/RenderInterface.hpp b/engine/include/RenderInterface.hpp deleted file mode 100644 index 6f845b4..0000000 --- a/engine/include/RenderInterface.hpp +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once -#include -#include -#include -#include - -struct RenderCommand -{ - enum Type - { - NONE, - - RESIZE_WINDOW, - SHUTDOWN - } type = NONE; -}; - -class IRenderer -{ -public: - IRenderer(GLFWwindow *window); - ~IRenderer(); - - void Start(); - void Shutdown(); - - bool GetThreadStatus(); - bool GetDrawStatus(); - - void ResizeWindow(int width, int height); - -private: - std::atomic isRunning; - std::atomic isDrawing; - std::atomic screenWidth, screenHeight; - - std::stop_token *stoken; - std::jthread renderThread; - boost::lockfree::spsc_queue> commands; - - GLFWwindow *window; - - virtual void Draw() = 0; - - void Threading(); - void Request(const RenderCommand &command); - void Request(const RenderCommand::Type &type); - virtual void Init() = 0; - virtual void Dispose() = 0; - void Loop(); - void ProcessCommand(const RenderCommand &command); - void Release(); -}; \ No newline at end of file diff --git a/engine/include/compile_config.hpp b/engine/include/compile_config.hpp index fbdf8e7..6fe4a2e 100644 --- a/engine/include/compile_config.hpp +++ b/engine/include/compile_config.hpp @@ -1,9 +1,11 @@ #pragma once +#define P7_LOGS_PATH L" /P7.Dir=logs/game/" + #ifdef NDEBUG - #define P7_SINK L"/P7.Sink=FileTxt" + #define P7_SINK L" /P7.Sink=FileTxt" #else - #define P7_SINK L"/P7.Sink=Console" + #define P7_SINK L" /P7.Sink=Console" #endif #ifndef APP_VERSION diff --git a/engine/src/AssetData.cpp b/engine/src/AssetData.cpp index 40cadbd..cdfdbdd 100644 --- a/engine/src/AssetData.cpp +++ b/engine/src/AssetData.cpp @@ -1,5 +1,5 @@ #include "AssetData.hpp" -#include "allocator.hpp" +#include AssetBinary::AssetBinary(uint8_t* &source, const size_t &sourceSize) { @@ -14,14 +14,14 @@ AssetBinary::~AssetBinary() DeallocateArray(content); } -AssetShader::AssetShader(uint8_t* &source, const size_t &sourceSize) +AssetVulkanShader::AssetVulkanShader(uint8_t* &source, const size_t &sourceSize) { content = reinterpret_cast(source); size = sourceSize; source = nullptr; } -AssetShader::~AssetShader() +AssetVulkanShader::~AssetVulkanShader() { if (content != nullptr) DeallocateArray(content); diff --git a/engine/src/AssetManager.cpp b/engine/src/AssetManager.cpp index e19fa19..522f38c 100644 --- a/engine/src/AssetManager.cpp +++ b/engine/src/AssetManager.cpp @@ -1,6 +1,6 @@ #include "compile_config.hpp" #include "AssetManager.hpp" -#include "allocator.hpp" +#include #include "Logger.h" #include #include @@ -174,20 +174,20 @@ void AssetManager::Loop() switch (asset.type) { - case AssetInfo::SHADER: + case AssetInfo::VULKAN_SHADER: { - AssetShader* shader = Allocate(entry.file->data, entry.file->size); + AssetVulkanShader* shader = Allocate(entry.file->data, entry.file->size); shadersStorage.push_back(shader); Redirect(entry.handle, shadersStorage.back()); break; } - case AssetInfo::MATERIAL: + case AssetInfo::VULKAN_MATERIAL: { - AssetMaterial* material = Allocate(); - if (entry.file->size < sizeof(AssetMaterial)) + AssetVulkanMaterial* material = Allocate(); + if (entry.file->size < sizeof(AssetVulkanMaterial)) LOG(CRITICAL, "File size is less than needed for material"); - std::memcpy(material, entry.file->data, sizeof(AssetMaterial)); + std::memcpy(material, entry.file->data, sizeof(AssetVulkanMaterial)); materialsStorage.push_back(material); Redirect(entry.handle, materialsStorage.back()); break; @@ -340,7 +340,7 @@ void AssetManager::Release() Deallocate(resource); } binaryStorage.clear(); - for (AssetShader* &resource : shadersStorage) + for (AssetVulkanShader* &resource : shadersStorage) { if (resource != nullptr) Deallocate(resource); @@ -357,6 +357,6 @@ void AssetManager::LoadShaders() for (const std::filesystem::directory_entry &entry : std::filesystem::directory_iterator(shadersRoot)) { if (entry.is_directory()) continue; - LoadAsync(AssetInfo::SHADER, entry.path()); + LoadAsync(AssetInfo::VULKAN_SHADER, entry.path()); } } \ No newline at end of file diff --git a/engine/src/FileSystem.cpp b/engine/src/FileSystem.cpp index e5d4062..4b54ca2 100644 --- a/engine/src/FileSystem.cpp +++ b/engine/src/FileSystem.cpp @@ -1,6 +1,6 @@ #include "FileSystem.hpp" #include "Logger.h" -#include "allocator.hpp" +#include IFileSystem::~IFileSystem() { diff --git a/engine/src/RenderInterface.cpp b/engine/src/RenderInterface.cpp deleted file mode 100644 index 812d48e..0000000 --- a/engine/src/RenderInterface.cpp +++ /dev/null @@ -1,119 +0,0 @@ -#include "RenderInterface.hpp" -#include "Logger.h" -#include -#include - -IRenderer::IRenderer(GLFWwindow *window) : - isRunning(false), - isDrawing(false) -{ - this->window = window; - int width = -1, height = -1; - glfwGetFramebufferSize(window, &width, &height); - screenWidth.store(width); - screenHeight.store(height); -} - -IRenderer::~IRenderer() -{ - Release(); -} - -void IRenderer::Start() -{ - if (isRunning) - { - LOG(CRITICAL, "Renderer can be started only once"); - throw std::logic_error("Renderer can be started only once"); - } - - isRunning.store(true); - isDrawing.store(true); - renderThread = std::jthread([this](std::stop_token stop) { - this->stoken = &stop; - Threading(); - }); -} - -void IRenderer::Threading() -{ - Logger::trace->Register_Thread(L"Renderer", 0); - LOG(INFO, "Renderer thread started"); - - Init(); - Loop(); - Release(); -} - - -void IRenderer::Loop() -{ - RenderCommand commandBuffer; - while (!stoken->stop_requested()) - { - while (commands.pop(commandBuffer)) - { - ProcessCommand(commandBuffer); - } - - Draw(); - } -} - -void IRenderer::ProcessCommand(const RenderCommand &command) -{ - switch(command.type) - { - case RenderCommand::SHUTDOWN: - { - LOG(INFO, "SHUTDOWN command"); - Shutdown(); - break; - } - - case RenderCommand::RESIZE_WINDOW: - { - LOG(INFO, "RESIZE_WINDOW command"); - - break; - } - - default: - { - LOG(WARNING, "Unhandled command. Type id: %d", command.type); - break; - } - } -} - -void IRenderer::Shutdown() -{ - renderThread.request_stop(); -} - -void IRenderer::Request(const RenderCommand &command) -{ - commands.push(command); -} - -void IRenderer::Request(const RenderCommand::Type &type) -{ - commands.push(RenderCommand {.type = type}); -} - -void IRenderer::ResizeWindow(int width, int height) -{ - screenWidth.store(width); - screenHeight.store(height); - Request(RenderCommand::RESIZE_WINDOW); -} - -void IRenderer::Release() -{ - Dispose(); - LOG(INFO, "Renderer is released"); - isRunning.store(false); -} - -bool IRenderer::GetThreadStatus() { return isRunning.load(); } -bool IRenderer::GetDrawStatus() { return isDrawing.load(); } diff --git a/engine/src/main.cpp b/engine/src/main.cpp index edeaf71..87b1ccb 100644 --- a/engine/src/main.cpp +++ b/engine/src/main.cpp @@ -1,15 +1,19 @@ #include "Logger.h" -#include + +#include +#include #include "compile_config.hpp" #include "Engine.hpp" +#include + IP7_Trace* Logger::trace; int main(int argc, char **argv) { // Setup P7 logger - IP7_Client *p7client = P7_Create_Client(P7_SINK); + IP7_Client *p7client = P7_Create_Client(P7_SINK P7_LOGS_PATH); P7_Set_Crash_Handler(); Logger::trace = P7_Create_Trace(p7client, L"TC 1"); Logger::trace->Register_Thread(L"Main", 0); @@ -18,7 +22,9 @@ int main(int argc, char **argv) // Setup GLFW glfwInit(); - glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + + // Vulkan only + // glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); GLFWwindow *window = glfwCreateWindow(800, 600, "Etredia Empires", nullptr, nullptr); @@ -26,39 +32,37 @@ int main(int argc, char **argv) LOG(CRITICAL, "GLFW Window failed"); else LOG(INFO, "GLFW Window created"); + glfwMakeContextCurrent(window); + // Setup assets AssetManager assetManager; assetManager.Start(); - assetManager.LoadShaders(); + //assetManager.LoadShaders(); // Setup Renderer // assetManager.LoadAsync(AssetInfo::MATERIAL, "assets/materials/helloworld.mat"); // AssetHandle baseMaterialHandle = assetManager.Find("assets/materials/helloworld.mat"); // AssetMaterial baseMaterial = assetManager.Get(baseMaterialHandle); - // IRenderer renderer(window); - // renderer.Start(); //Setup Engine Engine::assetManager = &assetManager; - //Engine::renderer = &renderer; + Engine::renderer = reinterpret_cast(Allocate(window)); glfwSetFramebufferSizeCallback(window, [](GLFWwindow *window, int width, int height) { Engine::renderer->ResizeWindow(width, height); }); - // Process GLFW events + // Game loop while(!glfwWindowShouldClose(window)) { + Engine::renderer->Draw(); + + glfwSwapBuffers(window); glfwPollEvents(); } // Free memory LOG(INFO, "Exit..."); - if (Engine::renderer != nullptr) - { // Wait for renderer to clean and shutdown - Engine::renderer->Shutdown(); - while(Engine::renderer->GetThreadStatus()); - } if (Engine::assetManager != nullptr) { // Wait for asset manager to clean and shutdown Engine::assetManager->Shutdown(); @@ -66,6 +70,7 @@ int main(int argc, char **argv) } glfwDestroyWindow(window); glfwTerminate(); + //TODO: check Unregister in other threads and make threaded module base class Logger::trace->Unregister_Thread(0); Logger::trace->Release(); p7client->Release(); diff --git a/renderers/magnum-renderer/CMakeLists.txt b/renderers/magnum-renderer/CMakeLists.txt new file mode 100644 index 0000000..ec1c7ed --- /dev/null +++ b/renderers/magnum-renderer/CMakeLists.txt @@ -0,0 +1,57 @@ +cmake_minimum_required (VERSION 3.8) + +if (POLICY CMP0141) + cmake_policy(SET CMP0141 NEW) + set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$,$>,$<$:EditAndContinue>,$<$:ProgramDatabase>>") +endif() + +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +project (magnum-renderer) + +# List sources + +file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS + "src/*.cpp" + "src/*.c" + "include/*.hpp" + "include/*.h" +) + +# Find dependencies + +if (WIN32) + set(MAGNUM_CONTEXT WglContext) +elseif(UNIX) + set(MAGNUM_CONTEXT GlxContext) +else() + message(FATAL_ERROR "No supported context for system") +endif() + +set(MAGNUM_WITH_GLFWAPPLICATION ON) +find_package(Magnum REQUIRED + GL + GlfwApplication + Shaders +) + +# Link library + +add_library(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} PUBLIC engine-api) +target_link_libraries(${PROJECT_NAME} PUBLIC utils) + +target_link_libraries(${PROJECT_NAME} PRIVATE p7) +target_link_libraries(${PROJECT_NAME} PRIVATE + Magnum::GL + Magnum::GlfwApplication + Magnum::Shaders + Magnum::Magnum) + +target_include_directories(${PROJECT_NAME} PUBLIC include/) + +if (CMAKE_VERSION VERSION_GREATER 3.12) + set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 20) +endif() \ No newline at end of file diff --git a/renderers/magnum-renderer/include/ee_magnum/Renderer.hpp b/renderers/magnum-renderer/include/ee_magnum/Renderer.hpp new file mode 100644 index 0000000..d0d5491 --- /dev/null +++ b/renderers/magnum-renderer/include/ee_magnum/Renderer.hpp @@ -0,0 +1,26 @@ +#pragma once + +#undef min +#undef max + +#include +#include + +#include + +using namespace Magnum; + +class MagnumRenderer : public IRenderer +{ +public: + MagnumRenderer(GLFWwindow *window); + ~MagnumRenderer(); + +protected: + void Clear() override; + void DrawMap() override; + void DrawUI() override; + +private: + Platform::GLContext context; +}; \ No newline at end of file diff --git a/renderers/magnum-renderer/src/Renderer.cpp b/renderers/magnum-renderer/src/Renderer.cpp new file mode 100644 index 0000000..ff6bc8d --- /dev/null +++ b/renderers/magnum-renderer/src/Renderer.cpp @@ -0,0 +1,58 @@ +#include "Logger.h" +#include + +#include +#include +#include +#include +#include + +#include + +#include + +using namespace Math::Literals; + +MagnumRenderer::MagnumRenderer(GLFWwindow *window) : IRenderer(window) +{ + +} + +MagnumRenderer::~MagnumRenderer() +{ + +} + +void MagnumRenderer::Clear() +{ + GL::defaultFramebuffer.clear(GL::FramebufferClear::Color); +} + +void MagnumRenderer::DrawMap() +{ + //TEST TRIANGLE + struct TriangleVertex { + Vector2 position; + Color3 color; + }; + const TriangleVertex vertices[]{ + {{-0.5f, -0.5f}, 0xff0000_rgbf}, /* Left vertex, red color */ + {{ 0.5f, -0.5f}, 0x00ff00_rgbf}, /* Right vertex, green color */ + {{ 0.0f, 0.5f}, 0x0000ff_rgbf} /* Top vertex, blue color */ + }; + + GL::Mesh mesh; + mesh.setCount((int)Containers::arraySize(vertices)) + .addVertexBuffer(GL::Buffer{vertices}, 0, + Shaders::VertexColor2D::Position{}, + Shaders::VertexColor2D::Color3{}); + + Shaders::VertexColor2D shader; + + shader.draw(mesh); +} + +void MagnumRenderer::DrawUI() +{ + +} \ No newline at end of file diff --git a/ECSAPI/.vscode/launch.json b/server/.vscode/launch.json similarity index 100% rename from ECSAPI/.vscode/launch.json rename to server/.vscode/launch.json diff --git a/ECSAPI/CMakeLists.txt b/server/CMakeLists.txt similarity index 74% rename from ECSAPI/CMakeLists.txt rename to server/CMakeLists.txt index 4f27b7c..8999193 100644 --- a/ECSAPI/CMakeLists.txt +++ b/server/CMakeLists.txt @@ -8,10 +8,10 @@ endif() set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -project ("ECSAPI") +project ("server") -add_subdirectory ("Economy") -add_subdirectory ("Economy/test") +add_subdirectory ("economy") +add_subdirectory ("economy/test") -add_subdirectory ("ECS") -add_subdirectory ("ECS/test") \ No newline at end of file +add_subdirectory ("ecs") +add_subdirectory ("ecs/test") \ No newline at end of file diff --git a/ECSAPI/Economy/CMakeLists.txt b/server/economy/CMakeLists.txt similarity index 100% rename from ECSAPI/Economy/CMakeLists.txt rename to server/economy/CMakeLists.txt diff --git a/ECSAPI/Economy/include/ee_economy/components/container.hpp b/server/economy/include/ee_economy/components/container.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/components/container.hpp rename to server/economy/include/ee_economy/components/container.hpp diff --git a/ECSAPI/Economy/include/ee_economy/components/deliverer.hpp b/server/economy/include/ee_economy/components/deliverer.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/components/deliverer.hpp rename to server/economy/include/ee_economy/components/deliverer.hpp diff --git a/ECSAPI/Economy/include/ee_economy/components/enterprise.hpp b/server/economy/include/ee_economy/components/enterprise.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/components/enterprise.hpp rename to server/economy/include/ee_economy/components/enterprise.hpp diff --git a/ECSAPI/Economy/include/ee_economy/components/miner.hpp b/server/economy/include/ee_economy/components/miner.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/components/miner.hpp rename to server/economy/include/ee_economy/components/miner.hpp diff --git a/ECSAPI/Economy/include/ee_economy/components/producer.hpp b/server/economy/include/ee_economy/components/producer.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/components/producer.hpp rename to server/economy/include/ee_economy/components/producer.hpp diff --git a/ECSAPI/Economy/include/ee_economy/components/state.hpp b/server/economy/include/ee_economy/components/state.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/components/state.hpp rename to server/economy/include/ee_economy/components/state.hpp diff --git a/ECSAPI/Economy/include/ee_economy/components/tags.hpp b/server/economy/include/ee_economy/components/tags.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/components/tags.hpp rename to server/economy/include/ee_economy/components/tags.hpp diff --git a/ECSAPI/Economy/include/ee_economy/defines.hpp b/server/economy/include/ee_economy/defines.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/defines.hpp rename to server/economy/include/ee_economy/defines.hpp diff --git a/ECSAPI/Economy/include/ee_economy/economy.hpp b/server/economy/include/ee_economy/economy.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/economy.hpp rename to server/economy/include/ee_economy/economy.hpp diff --git a/ECSAPI/Economy/include/ee_economy/enterprise_defaults.hpp b/server/economy/include/ee_economy/enterprise_defaults.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/enterprise_defaults.hpp rename to server/economy/include/ee_economy/enterprise_defaults.hpp diff --git a/ECSAPI/Economy/include/ee_economy/resources_exchange.hpp b/server/economy/include/ee_economy/resources_exchange.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/resources_exchange.hpp rename to server/economy/include/ee_economy/resources_exchange.hpp diff --git a/ECSAPI/Economy/include/ee_economy/systems.hpp b/server/economy/include/ee_economy/systems.hpp similarity index 100% rename from ECSAPI/Economy/include/ee_economy/systems.hpp rename to server/economy/include/ee_economy/systems.hpp diff --git a/ECSAPI/Economy/src/Economy.cpp b/server/economy/src/Economy.cpp similarity index 100% rename from ECSAPI/Economy/src/Economy.cpp rename to server/economy/src/Economy.cpp diff --git a/ECSAPI/Economy/src/systems/delivering.cpp b/server/economy/src/systems/delivering.cpp similarity index 100% rename from ECSAPI/Economy/src/systems/delivering.cpp rename to server/economy/src/systems/delivering.cpp diff --git a/ECSAPI/Economy/src/systems/enterprise_routine.cpp b/server/economy/src/systems/enterprise_routine.cpp similarity index 100% rename from ECSAPI/Economy/src/systems/enterprise_routine.cpp rename to server/economy/src/systems/enterprise_routine.cpp diff --git a/ECSAPI/Economy/src/systems/mining.cpp b/server/economy/src/systems/mining.cpp similarity index 100% rename from ECSAPI/Economy/src/systems/mining.cpp rename to server/economy/src/systems/mining.cpp diff --git a/ECSAPI/Economy/test/CMakeLists.txt b/server/economy/test/CMakeLists.txt similarity index 100% rename from ECSAPI/Economy/test/CMakeLists.txt rename to server/economy/test/CMakeLists.txt diff --git a/ECSAPI/ECS/test/main.cpp b/server/economy/test/main.cpp similarity index 100% rename from ECSAPI/ECS/test/main.cpp rename to server/economy/test/main.cpp diff --git a/ECSAPI/Economy/test/systems/delivering.cpp b/server/economy/test/systems/delivering.cpp similarity index 100% rename from ECSAPI/Economy/test/systems/delivering.cpp rename to server/economy/test/systems/delivering.cpp diff --git a/ECSAPI/Economy/test/systems/enterprise_routine.cpp b/server/economy/test/systems/enterprise_routine.cpp similarity index 100% rename from ECSAPI/Economy/test/systems/enterprise_routine.cpp rename to server/economy/test/systems/enterprise_routine.cpp diff --git a/ECSAPI/Economy/test/systems/mining.cpp b/server/economy/test/systems/mining.cpp similarity index 100% rename from ECSAPI/Economy/test/systems/mining.cpp rename to server/economy/test/systems/mining.cpp diff --git a/ECSAPI/Economy/test/test_conf.hpp b/server/economy/test/test_conf.hpp similarity index 100% rename from ECSAPI/Economy/test/test_conf.hpp rename to server/economy/test/test_conf.hpp diff --git a/ECSAPI/ECS/CMakeLists.txt b/server/ecs/CMakeLists.txt similarity index 100% rename from ECSAPI/ECS/CMakeLists.txt rename to server/ecs/CMakeLists.txt diff --git a/ECSAPI/ECS/include/ee_ecs/api.hpp b/server/ecs/include/ee_ecs/api.hpp similarity index 100% rename from ECSAPI/ECS/include/ee_ecs/api.hpp rename to server/ecs/include/ee_ecs/api.hpp diff --git a/ECSAPI/ECS/include/ee_ecs/data.hpp b/server/ecs/include/ee_ecs/data.hpp similarity index 100% rename from ECSAPI/ECS/include/ee_ecs/data.hpp rename to server/ecs/include/ee_ecs/data.hpp diff --git a/ECSAPI/ECS/include/ee_ecs/ecs.hpp b/server/ecs/include/ee_ecs/ecs.hpp similarity index 100% rename from ECSAPI/ECS/include/ee_ecs/ecs.hpp rename to server/ecs/include/ee_ecs/ecs.hpp diff --git a/ECSAPI/ECS/include/ee_ecs/world.hpp b/server/ecs/include/ee_ecs/world.hpp similarity index 100% rename from ECSAPI/ECS/include/ee_ecs/world.hpp rename to server/ecs/include/ee_ecs/world.hpp diff --git a/ECSAPI/ECS/src/api.cpp b/server/ecs/src/api.cpp similarity index 100% rename from ECSAPI/ECS/src/api.cpp rename to server/ecs/src/api.cpp diff --git a/ECSAPI/ECS/src/world.cpp b/server/ecs/src/world.cpp similarity index 100% rename from ECSAPI/ECS/src/world.cpp rename to server/ecs/src/world.cpp diff --git a/ECSAPI/ECS/test/CMakeLists.txt b/server/ecs/test/CMakeLists.txt similarity index 100% rename from ECSAPI/ECS/test/CMakeLists.txt rename to server/ecs/test/CMakeLists.txt diff --git a/ECSAPI/ECS/test/benchmark.cpp b/server/ecs/test/benchmark.cpp similarity index 100% rename from ECSAPI/ECS/test/benchmark.cpp rename to server/ecs/test/benchmark.cpp diff --git a/ECSAPI/Economy/test/main.cpp b/server/ecs/test/main.cpp similarity index 100% rename from ECSAPI/Economy/test/main.cpp rename to server/ecs/test/main.cpp diff --git a/ECSAPI/ECS/test/test_conf.hpp b/server/ecs/test/test_conf.hpp similarity index 100% rename from ECSAPI/ECS/test/test_conf.hpp rename to server/ecs/test/test_conf.hpp diff --git a/ECSAPI/ECS/test/world.cpp b/server/ecs/test/world.cpp similarity index 100% rename from ECSAPI/ECS/test/world.cpp rename to server/ecs/test/world.cpp diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index db955b2..c3055eb 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -1,4 +1,26 @@ +if (POLICY CMP0141) + cmake_policy(SET CMP0141 NEW) + set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$,$>,$<$:EditAndContinue>,$<$:ProgramDatabase>>") +endif() + +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + + project(utils) -add_library(${PROJECT_NAME} INTERFACE) -target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include) \ No newline at end of file +file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS + "src/*.cpp" + "src/*.c" + "include/*.hpp" + "include/*.h" +) + + +# Find dependencies + +# Link library + +add_library(${PROJECT_NAME} ${SOURCES}) + +target_include_directories(${PROJECT_NAME} PUBLIC include/) \ No newline at end of file diff --git a/utils/include/allocator.hpp b/utils/include/ee_utils/allocator.hpp similarity index 100% rename from utils/include/allocator.hpp rename to utils/include/ee_utils/allocator.hpp diff --git a/utils/src/utils.cpp b/utils/src/utils.cpp new file mode 100644 index 0000000..e69de29 diff --git a/vcpkg.json b/vcpkg.json index 6126994..3435c37 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -7,6 +7,7 @@ "vulkan", "glfw3", "glm", + {"name": "magnum", "features": ["glfwapplication"]}, "rmlui", "gtest" ]