diff --git a/CMakeLists.txt b/CMakeLists.txt index 04cbb07..c1e9feb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(CodingGame LANGUAGES C CXX) +set(ENGINE_TARGET engine) + # ---------- Build-type defaults (only affects single-config generators like Ninja/Make) ---------- if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) @@ -12,7 +14,7 @@ if (UNIX) FetchContent_Declare( glm GIT_REPOSITORY https://github.com/g-truc/glm.git - GIT_TAG bf71a834948186f4097caa076cd2663c69a10e1e # refs/tags/1.0.1 + GIT_TAG a532f5b1cf27d6a3c099437e6959cf7e398a0a67 # refs/tags/1.0.2 ) FetchContent_MakeAvailable(glm) @@ -34,99 +36,5 @@ elseif (MSVC) # vcpkg find_package(EnTT CONFIG REQUIRED) endif() -add_executable(CodingGame - src/IO/parser.cpp - src/IO/file_manager.cpp - - src/window/window.cpp - - src/components/batch.cpp - - src/renderer/debug.cpp - src/renderer/mesh.cpp - src/renderer/shader.cpp - src/renderer/texture.cpp - src/renderer/wavefront.cpp - src/renderer/engine.cpp - src/renderer/renderer.cpp - - src/main.cpp -) - -set_property(TARGET CodingGame PROPERTY CXX_STANDARD 17) -set_property(TARGET CodingGame PROPERTY CXX_STANDARD_REQUIRED ON) - -file(COPY src/shaders DESTINATION ${CMAKE_BINARY_DIR}/) - -target_include_directories(CodingGame PRIVATE - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/contrib -) -target_link_libraries(CodingGame PRIVATE - SDL3::SDL3 - OpenGL::GL - GLEW::GLEW - glm::glm - EnTT::EnTT -) - -# ---------- Visibility (helps optimizer & smaller binaries on Release) ---------- -# Only affects non-Windows compilers -set_target_properties(CodingGame PROPERTIES - CXX_VISIBILITY_PRESET hidden - VISIBILITY_INLINES_HIDDEN YES -) - -# ---------- Per-config flags ---------- -# Debug flags (your original intent, kept) -if (MSVC) - target_compile_options(CodingGame PRIVATE $<$:/Zi>) - target_link_options(CodingGame PRIVATE $<$:/DEBUG:FULL>) -else() - target_compile_options(CodingGame PRIVATE $<$:-ggdb>) -endif() - -# Release flags -if (MSVC) - # /O2: optimize speed, /GL: whole program opt (LTCG), /DNDEBUG: disable asserts - target_compile_options(CodingGame PRIVATE - $<$:/O2> - $<$:/DNDEBUG> - $<$:/O2> - ) - # Link-time codegen & extra linker opts for smaller/faster binaries - target_link_options(CodingGame PRIVATE - $<$:/LTCG /OPT:ICF /OPT:REF> - $<$:/LTCG /OPT:ICF /OPT:REF> - ) -else() - # GCC/Clang - # -O3 for max opts, -ffast-math optional but can be risky; we keep it OFF by default. - option(CODINGGAME_USE_MARCH_NATIVE "Enable -march=native on Release for this machine" ON) - target_compile_options(CodingGame PRIVATE - $<$:-O3> - $<$,$>:-march=native> - $<$:-DNDEBUG> - $<$:-O3 -g> - ) - # Linker: enable LTO when available; optionally strip symbols on non-Apple - include(CheckIPOSupported) # IPO == LTO in CMake terms - check_ipo_supported(RESULT ipo_supported OUTPUT ipo_msg) - if(ipo_supported) - set_property(TARGET CodingGame PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE) - set_property(TARGET CodingGame PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE) - endif() - - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT APPLE) - # -s strips symbols at link stage (use only for pure Release) - target_link_options(CodingGame PRIVATE $<$:-s>) - endif() -endif() - -# ---------- Windows: copy runtime DLLs ---------- -if (WIN32) - add_custom_command(TARGET CodingGame POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - $ $ - COMMAND_EXPAND_LISTS) -endif() \ No newline at end of file +add_subdirectory(engine) +add_subdirectory(sandbox) diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt new file mode 100644 index 0000000..d5e1e46 --- /dev/null +++ b/engine/CMakeLists.txt @@ -0,0 +1,89 @@ +add_library(${ENGINE_TARGET} STATIC + src/IO/parser.cpp + src/IO/file_manager.cpp + + src/window/window.cpp + + src/components/batch.cpp + + src/renderer/debug.cpp + src/renderer/mesh.cpp + src/renderer/shader.cpp + src/renderer/texture.cpp + src/renderer/wavefront.cpp + src/renderer/engine.cpp + src/renderer/renderer.cpp + + src/main.cpp +) + +set_target_properties(${ENGINE_TARGET} PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN YES +) + +target_include_directories(${ENGINE_TARGET} PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/contrib +) +target_link_libraries(${ENGINE_TARGET} PUBLIC + SDL3::SDL3 + OpenGL::GL + GLEW::GLEW + glm::glm + EnTT::EnTT +) + +if (MSVC) + target_compile_options(${ENGINE_TARGET} PRIVATE $<$:/Zi>) + target_link_options(${ENGINE_TARGET} PRIVATE $<$:/DEBUG:FULL>) +else() + target_compile_options(${ENGINE_TARGET} PRIVATE $<$:-ggdb>) +endif() + +# Release flags +if (MSVC) + # /O2: optimize speed, /GL: whole program opt (LTCG), /DNDEBUG: disable asserts + target_compile_options(${ENGINE_TARGET} PRIVATE + $<$:/O2> + $<$:/DNDEBUG> + $<$:/O2> + ) + # Link-time codegen & extra linker opts for smaller/faster binaries + target_link_options(${ENGINE_TARGET} PRIVATE + $<$:/LTCG /OPT:ICF /OPT:REF> + $<$:/LTCG /OPT:ICF /OPT:REF> + ) +else() + # GCC/Clang + # -O3 for max opts, -ffast-math optional but can be risky; we keep it OFF by default. + option(CODINGGAME_USE_MARCH_NATIVE "Enable -march=native on Release for this machine" ON) + target_compile_options(${ENGINE_TARGET} PRIVATE + $<$:-O3> + $<$,$>:-march=native> + $<$:-DNDEBUG> + $<$:-O3 -g> + ) + # Linker: enable LTO when available; optionally strip symbols on non-Apple + include(CheckIPOSupported) # IPO == LTO in CMake terms + check_ipo_supported(RESULT ipo_supported OUTPUT ipo_msg) + if(ipo_supported) + set_property(TARGET ${ENGINE_TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE) + set_property(TARGET ${ENGINE_TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE) + endif() + + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT APPLE) + # -s strips symbols at link stage (use only for pure Release) + target_link_options(${ENGINE_TARGET} PRIVATE $<$:-s>) + endif() +endif() + +# ---------- Windows: copy runtime DLLs ---------- +if (WIN32) + add_custom_command(TARGET ${ENGINE_TARGET} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + $ $ + COMMAND_EXPAND_LISTS) +endif() diff --git a/contrib/stb_image.h b/engine/contrib/stb_image.h similarity index 100% rename from contrib/stb_image.h rename to engine/contrib/stb_image.h diff --git a/include/IO/file_manager.h b/engine/include/engine/IO/file_manager.h similarity index 100% rename from include/IO/file_manager.h rename to engine/include/engine/IO/file_manager.h diff --git a/include/IO/parser.h b/engine/include/engine/IO/parser.h similarity index 100% rename from include/IO/parser.h rename to engine/include/engine/IO/parser.h diff --git a/include/app/app.h b/engine/include/engine/app/app.h similarity index 100% rename from include/app/app.h rename to engine/include/engine/app/app.h diff --git a/include/components/batch.h b/engine/include/engine/components/batch.h similarity index 93% rename from include/components/batch.h rename to engine/include/engine/components/batch.h index 55f11a6..9bf18eb 100644 --- a/include/components/batch.h +++ b/engine/include/engine/components/batch.h @@ -1,7 +1,7 @@ #ifndef COMPONENT_BATCH_H_ #define COMPONENT_BATCH_H_ -#include "renderer/renderer.h" +#include "engine/renderer/renderer.h" // requires mesh component struct batch { diff --git a/include/components/camera.h b/engine/include/engine/components/camera.h similarity index 100% rename from include/components/camera.h rename to engine/include/engine/components/camera.h diff --git a/include/components/light.h b/engine/include/engine/components/light.h similarity index 93% rename from include/components/light.h rename to engine/include/engine/components/light.h index 493dc77..8e5baf1 100644 --- a/include/components/light.h +++ b/engine/include/engine/components/light.h @@ -2,7 +2,7 @@ #define COMPONENTS_LIGHT_H_ #include -#include "renderer/renderer.h" +#include "engine/renderer/renderer.h" struct light { friend class Renderer; diff --git a/include/components/mesh.h b/engine/include/engine/components/mesh.h similarity index 80% rename from include/components/mesh.h rename to engine/include/engine/components/mesh.h index 08c64e5..0e576d4 100644 --- a/include/components/mesh.h +++ b/engine/include/engine/components/mesh.h @@ -2,7 +2,7 @@ #define COMPONENTS_MESH_H_ #include -#include "renderer/wavefront.h" +#include "engine/renderer/wavefront.h" struct mesh { std::shared_ptr object; diff --git a/include/components/rotate.h b/engine/include/engine/components/rotate.h similarity index 100% rename from include/components/rotate.h rename to engine/include/engine/components/rotate.h diff --git a/include/components/transform.h b/engine/include/engine/components/transform.h similarity index 100% rename from include/components/transform.h rename to engine/include/engine/components/transform.h diff --git a/include/renderer/basics.h b/engine/include/engine/renderer/basics.h similarity index 92% rename from include/renderer/basics.h rename to engine/include/engine/renderer/basics.h index 1a7e7d1..f1a7301 100644 --- a/include/renderer/basics.h +++ b/engine/include/engine/renderer/basics.h @@ -3,7 +3,7 @@ #include -#include "renderer/mesh.h" +#include "engine/renderer/mesh.h" class Vertex { friend class Mesh; diff --git a/include/renderer/debug.h b/engine/include/engine/renderer/debug.h similarity index 100% rename from include/renderer/debug.h rename to engine/include/engine/renderer/debug.h diff --git a/include/renderer/engine.h b/engine/include/engine/renderer/engine.h similarity index 75% rename from include/renderer/engine.h rename to engine/include/engine/renderer/engine.h index 466b855..2653ca0 100644 --- a/include/renderer/engine.h +++ b/engine/include/engine/renderer/engine.h @@ -4,10 +4,10 @@ #include #include -#include "window/window.h" -#include "window/events/window.h" +#include "engine/window/window.h" +#include "engine/window/events/window.h" -#include "app/app.h" +#include "engine/app/app.h" class Engine { public: diff --git a/include/renderer/material.h b/engine/include/engine/renderer/material.h similarity index 97% rename from include/renderer/material.h rename to engine/include/engine/renderer/material.h index 57b84fe..2dda85e 100644 --- a/include/renderer/material.h +++ b/engine/include/engine/renderer/material.h @@ -4,7 +4,7 @@ #include #include -#include "texture.h" +#include "engine/renderer/texture.h" class Material { private: diff --git a/include/renderer/mesh.h b/engine/include/engine/renderer/mesh.h similarity index 93% rename from include/renderer/mesh.h rename to engine/include/engine/renderer/mesh.h index cc2e506..9c9a912 100644 --- a/include/renderer/mesh.h +++ b/engine/include/engine/renderer/mesh.h @@ -5,7 +5,7 @@ #include #include -#include "renderer/basics.h" +#include "engine/renderer/basics.h" class Mesh { public: // TODO: abstract away diff --git a/include/renderer/renderer.h b/engine/include/engine/renderer/renderer.h similarity index 94% rename from include/renderer/renderer.h rename to engine/include/engine/renderer/renderer.h index 79946ce..f9c8f46 100644 --- a/include/renderer/renderer.h +++ b/engine/include/engine/renderer/renderer.h @@ -4,7 +4,7 @@ #include #include -#include "renderer/shader.h" +#include "engine/renderer/shader.h" // TODO: make static or singleton class Renderer { diff --git a/include/renderer/shader.h b/engine/include/engine/renderer/shader.h similarity index 100% rename from include/renderer/shader.h rename to engine/include/engine/renderer/shader.h diff --git a/include/renderer/texture.h b/engine/include/engine/renderer/texture.h similarity index 100% rename from include/renderer/texture.h rename to engine/include/engine/renderer/texture.h diff --git a/include/renderer/wavefront.h b/engine/include/engine/renderer/wavefront.h similarity index 90% rename from include/renderer/wavefront.h rename to engine/include/engine/renderer/wavefront.h index 2ee0081..5289cba 100644 --- a/include/renderer/wavefront.h +++ b/engine/include/engine/renderer/wavefront.h @@ -7,10 +7,10 @@ #include #include -#include "shader.h" -#include "renderer/renderer.h" -#include "renderer/material.h" -#include "renderer/mesh.h" +#include "engine/renderer/shader.h" +#include "engine/renderer/renderer.h" +#include "engine/renderer/material.h" +#include "engine/renderer/mesh.h" enum ObjElement { OHASH, MTLLIB, USEMTL, O, V, VN, VT, F, OUNKNOWN }; enum MtlElement { MHASH, NEWMTL, NS, KA, KS, KD, NI, D, ILLUM, MAP_KD, MAP_KA, MUNKNOWN }; diff --git a/include/window/event.h b/engine/include/engine/window/event.h similarity index 100% rename from include/window/event.h rename to engine/include/engine/window/event.h diff --git a/include/window/events/window.h b/engine/include/engine/window/events/window.h similarity index 100% rename from include/window/events/window.h rename to engine/include/engine/window/events/window.h diff --git a/include/window/window.h b/engine/include/engine/window/window.h similarity index 97% rename from include/window/window.h rename to engine/include/engine/window/window.h index 7d562a4..282946c 100644 --- a/include/window/window.h +++ b/engine/include/engine/window/window.h @@ -3,7 +3,7 @@ #include #include -#include "event.h" +#include "engine/window/event.h" #define ENGINE_GL_MAJOR_VERSION 4 #define ENGINE_GL_MINOR_VERSION 6 diff --git a/src/IO/file_manager.cpp b/engine/src/IO/file_manager.cpp similarity index 94% rename from src/IO/file_manager.cpp rename to engine/src/IO/file_manager.cpp index 745f7cc..6e7255b 100644 --- a/src/IO/file_manager.cpp +++ b/engine/src/IO/file_manager.cpp @@ -1,4 +1,4 @@ -#include "IO/file_manager.h" +#include "engine/IO/file_manager.h" #include #include diff --git a/src/IO/parser.cpp b/engine/src/IO/parser.cpp similarity index 99% rename from src/IO/parser.cpp rename to engine/src/IO/parser.cpp index 4d59c64..4a02b83 100644 --- a/src/IO/parser.cpp +++ b/engine/src/IO/parser.cpp @@ -2,7 +2,7 @@ #include // for strtof (fallback) #include -#include "IO/parser.h" +#include "engine/IO/parser.h" // Skip whitespace void Parser::SkipSpaces() { diff --git a/src/components/batch.cpp b/engine/src/components/batch.cpp similarity index 92% rename from src/components/batch.cpp rename to engine/src/components/batch.cpp index c0e9301..632c643 100644 --- a/src/components/batch.cpp +++ b/engine/src/components/batch.cpp @@ -1,6 +1,6 @@ #include -#include "components/batch.h" +#include "engine/components/batch.h" unsigned int batch::LastID = 0; diff --git a/src/main.cpp b/engine/src/main.cpp similarity index 95% rename from src/main.cpp rename to engine/src/main.cpp index 69298a3..cfcfd6a 100644 --- a/src/main.cpp +++ b/engine/src/main.cpp @@ -12,19 +12,19 @@ #include #include -#include "renderer/shader.h" -#include "renderer/wavefront.h" -#include "renderer/engine.h" -#include "renderer/renderer.h" +#include "engine/renderer/shader.h" +#include "engine/renderer/wavefront.h" +#include "engine/renderer/engine.h" +#include "engine/renderer/renderer.h" -#include "IO/file_manager.h" +#include "engine/IO/file_manager.h" -#include "components/transform.h" -#include "components/light.h" -#include "components/camera.h" -#include "components/mesh.h" -#include "components/rotate.h" -#include "components/batch.h" +#include "engine/components/transform.h" +#include "engine/components/light.h" +#include "engine/components/camera.h" +#include "engine/components/mesh.h" +#include "engine/components/rotate.h" +#include "engine/components/batch.h" class Game : public IApplication { public: diff --git a/src/renderer/debug.cpp b/engine/src/renderer/debug.cpp similarity index 98% rename from src/renderer/debug.cpp rename to engine/src/renderer/debug.cpp index 281962e..c9c4e61 100644 --- a/src/renderer/debug.cpp +++ b/engine/src/renderer/debug.cpp @@ -1,4 +1,4 @@ -#include "renderer/debug.h" +#include "engine/renderer/debug.h" #include diff --git a/src/renderer/engine.cpp b/engine/src/renderer/engine.cpp similarity index 88% rename from src/renderer/engine.cpp rename to engine/src/renderer/engine.cpp index ab25987..a956e12 100644 --- a/src/renderer/engine.cpp +++ b/engine/src/renderer/engine.cpp @@ -1,9 +1,9 @@ #include -#include "renderer/engine.h" -#include "window/event.h" +#include "engine/renderer/engine.h" +#include "engine/window/event.h" -#include "renderer/wavefront.h" +#include "engine/renderer/wavefront.h" std::unique_ptr Engine::s_app = nullptr; std::shared_ptr Engine::s_window = nullptr; diff --git a/src/renderer/mesh.cpp b/engine/src/renderer/mesh.cpp similarity index 98% rename from src/renderer/mesh.cpp rename to engine/src/renderer/mesh.cpp index ee02817..f453f32 100644 --- a/src/renderer/mesh.cpp +++ b/engine/src/renderer/mesh.cpp @@ -1,6 +1,6 @@ #include -#include "renderer/mesh.h" +#include "engine/renderer/mesh.h" Mesh::Mesh() { m_vao = 0; diff --git a/src/renderer/renderer.cpp b/engine/src/renderer/renderer.cpp similarity index 96% rename from src/renderer/renderer.cpp rename to engine/src/renderer/renderer.cpp index 7c8e9bd..e30d84b 100644 --- a/src/renderer/renderer.cpp +++ b/engine/src/renderer/renderer.cpp @@ -9,15 +9,15 @@ #define GLM_ENABLE_EXPERIMENTAL #include -#include "renderer/renderer.h" -#include "window/window.h" -#include "IO/file_manager.h" +#include "engine/renderer/renderer.h" +#include "engine/window/window.h" +#include "engine/IO/file_manager.h" -#include "components/transform.h" -#include "components/camera.h" -#include "components/light.h" -#include "components/mesh.h" -#include "components/batch.h" +#include "engine/components/transform.h" +#include "engine/components/camera.h" +#include "engine/components/light.h" +#include "engine/components/mesh.h" +#include "engine/components/batch.h" Renderer::Renderer(entt::registry& registry) : m_registry(registry) { diff --git a/src/renderer/shader.cpp b/engine/src/renderer/shader.cpp similarity index 99% rename from src/renderer/shader.cpp rename to engine/src/renderer/shader.cpp index ed58acb..4f33a68 100644 --- a/src/renderer/shader.cpp +++ b/engine/src/renderer/shader.cpp @@ -1,6 +1,6 @@ #include #include -#include "renderer/shader.h" +#include "engine/renderer/shader.h" Shader::Shader() { diff --git a/src/renderer/texture.cpp b/engine/src/renderer/texture.cpp similarity index 96% rename from src/renderer/texture.cpp rename to engine/src/renderer/texture.cpp index 8b67ca4..04539c8 100644 --- a/src/renderer/texture.cpp +++ b/engine/src/renderer/texture.cpp @@ -2,7 +2,7 @@ #include #include -#include "renderer/texture.h" +#include "engine/renderer/texture.h" #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" diff --git a/src/renderer/wavefront.cpp b/engine/src/renderer/wavefront.cpp similarity index 99% rename from src/renderer/wavefront.cpp rename to engine/src/renderer/wavefront.cpp index 731b48d..cd5effd 100644 --- a/src/renderer/wavefront.cpp +++ b/engine/src/renderer/wavefront.cpp @@ -5,9 +5,9 @@ #include #include -#include "IO/parser.h" -#include "renderer/mesh.h" -#include "renderer/wavefront.h" +#include "engine/IO/parser.h" +#include "engine/renderer/mesh.h" +#include "engine/renderer/wavefront.h" #define DEFAULT_MATERIAL_NAME "default" diff --git a/src/shaders/depth.fs b/engine/src/shaders/depth.fs similarity index 100% rename from src/shaders/depth.fs rename to engine/src/shaders/depth.fs diff --git a/src/shaders/depth.vs b/engine/src/shaders/depth.vs similarity index 100% rename from src/shaders/depth.vs rename to engine/src/shaders/depth.vs diff --git a/src/shaders/main.vs b/engine/src/shaders/main.vs similarity index 100% rename from src/shaders/main.vs rename to engine/src/shaders/main.vs diff --git a/src/shaders/pbr.fs b/engine/src/shaders/pbr.fs similarity index 100% rename from src/shaders/pbr.fs rename to engine/src/shaders/pbr.fs diff --git a/src/window/window.cpp b/engine/src/window/window.cpp similarity index 97% rename from src/window/window.cpp rename to engine/src/window/window.cpp index 54cf89c..3716bbe 100644 --- a/src/window/window.cpp +++ b/engine/src/window/window.cpp @@ -1,12 +1,12 @@ #include -#include "window/window.h" -#include "window/events/window.h" +#include "engine/window/window.h" +#include "engine/window/events/window.h" #include #include -#include "renderer/debug.h" +#include "engine/renderer/debug.h" std::shared_ptr Window::s_instance = nullptr; diff --git a/sandbox/CMakeLists.txt b/sandbox/CMakeLists.txt new file mode 100644 index 0000000..afca6d7 --- /dev/null +++ b/sandbox/CMakeLists.txt @@ -0,0 +1,10 @@ +set(SANDBOX_TARGET sandbox) + +add_executable(${SANDBOX_TARGET} src/main.cpp) + +set_target_properties(${SANDBOX_TARGET} PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON +) + +target_link_libraries(${SANDBOX_TARGET} PRIVATE ${ENGINE_TARGET}) diff --git a/sandbox/src/main.cpp b/sandbox/src/main.cpp new file mode 100644 index 0000000..0fe67cc --- /dev/null +++ b/sandbox/src/main.cpp @@ -0,0 +1,6 @@ +#include +#include "engine/renderer/engine.h" + +int main(int argc, char **argv) { + return 0; +}