From 779c51c2f8016e8deb66b06d299c7ccafa8594ff Mon Sep 17 00:00:00 2001 From: Bliblank Date: Sun, 12 Apr 2026 14:18:55 -0500 Subject: [PATCH] fix sdl3 linking + comments --- CMakeLists.txt | 5 ++--- README.md | 11 +++++++---- src/app/App.cpp | 4 +--- src/app/App.hpp | 2 +- src/app/Window.cpp | 2 +- src/app/Window.hpp | 4 ++++ src/engine/Engine.cpp | 8 ++++---- src/engine/Engine.hpp | 6 ++++-- src/main.cpp | 1 + src/utils/utils.hpp | 12 ++++++++---- 10 files changed, 33 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 272b052..552b958 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,8 +20,7 @@ set(Vulkan_INCLUDE_DIR "${VULKAN_PATH}/Include") set(Vulkan_LIBRARY "${VULKAN_PATH}/Lib/vulkan-1.lib") find_package(Vulkan REQUIRED) -# TODO: use SDL in the vulkanSDK if available -set(SDL3_DIR "${SDL3_PATH}/cmake") +set(SDL3_DIR "${VULKAN_PATH}/cmake") find_package(SDL3 REQUIRED) # TODO: cascade cmakelists.txt @@ -38,7 +37,7 @@ target_include_directories(ouros PRIVATE ) if(WIN32) - set(SDL3_DLL "${SDL3_PATH}/lib/x64/SDL3.dll") # assuming youre not arm or 32 bit + set(SDL3_DLL "${VULKAN_PATH}/Bin/SDL3.dll") add_custom_command(TARGET ouros POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL3_DLL}" diff --git a/README.md b/README.md index bc2bb24..8f051ec 100644 --- a/README.md +++ b/README.md @@ -43,9 +43,13 @@ Below is beyond Sascha's guide, but available elsewhere on his github. These are - CMake (im using 4.0.0) - C++20 compatible compiler (I use g++12 or MSVC++17) (probably works with mingw but I haven't tested it myself) - Vulkan compatible gpu drivers (tested with an RTX3070 and an R9700) - - Vulkan SDK (https://vulkan.lunarg.com/sdk/home) <- the installer provides the option to install SDL and VOC as well as verifies GPU drivers - - SDL3 (im using version 3.4.4) + - Vulkan SDK (https://vulkan.lunarg.com/sdk/home) + - SDL3* + - VOC* + - GLM* - Will add more as the project grows + + *packaged with the Vulkan SDK ### Clone respository: ```bash @@ -54,8 +58,7 @@ $ git clone https://git.vxbard.net/homeburger/ouros.git --recursive ### Configure and build project: ```bash $ cmake -S . -B build \ - -VULKAN_PATH="${VULKAN_INSTALL_PATH}" \ # either set these variables or substitute them in - -DSDL3_PATH="${SDL3_INSTALL_PATH}" # optional, dont need if youre using the sdl in the vulkan sdk + -DVULKAN_PATH="${VULKAN_INSTALL_PATH}" # either set this variable or substitute it in $ cmake --build build -j ``` ### Execute application: diff --git a/src/app/App.cpp b/src/app/App.cpp index c705816..b07014a 100644 --- a/src/app/App.cpp +++ b/src/app/App.cpp @@ -24,12 +24,10 @@ int App::run() { utils::debugPrint(__FUNCTION__, __LINE__, "Run app.", utils::DebugLevel::Trace); - engine_->exec(); - bool quit = false; while (!quit) { // app loop for as long as the window is open - // other threads might be able to change quit to true to auto close + // other threads might be able to change quit to true to auto close in the future SDL_Event event; while(SDL_PollEvent(&event)) { // TODO: pass event handling to window diff --git a/src/app/App.hpp b/src/app/App.hpp index 0b4f39d..d24b948 100644 --- a/src/app/App.hpp +++ b/src/app/App.hpp @@ -11,7 +11,7 @@ public: App(); ~App() = default; - // excecute, called from main() + // excecute, called from main(). returns after window closes int run(); private: diff --git a/src/app/Window.cpp b/src/app/Window.cpp index 7a0fdcc..a127a05 100644 --- a/src/app/Window.cpp +++ b/src/app/Window.cpp @@ -16,7 +16,7 @@ Window::~Window() { int Window::init() { - sdlWindow_ = SDL_CreateWindow("How to Vulkan", 1280u, 720u, SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE); + sdlWindow_ = SDL_CreateWindow("Ouros: Vulkan", 1280u, 720u, SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE); return (sdlWindow_ == nullptr); diff --git a/src/app/Window.hpp b/src/app/Window.hpp index b2e4e74..4b31295 100644 --- a/src/app/Window.hpp +++ b/src/app/Window.hpp @@ -15,8 +15,12 @@ public: private: + // launches window int init(); + // this window class will eventually hold mouse, keyboard, audio, etc. interfaces, like an SDL3 hub + // app will be able to attach callbacks for mouse and keyboard events + SDL_Window* sdlWindow_; }; \ No newline at end of file diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 9d337c2..798fe17 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -13,10 +13,6 @@ Engine::Engine(Window* window): window_(window) { void Engine::init() { -} - -void Engine::exec() { - VkApplicationInfo appInfo { .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, .pApplicationName = "How to Vulkan", @@ -41,3 +37,7 @@ void Engine::exec() { } } + +void Engine::process() { + +} diff --git a/src/engine/Engine.hpp b/src/engine/Engine.hpp index a82459a..9ff32bc 100644 --- a/src/engine/Engine.hpp +++ b/src/engine/Engine.hpp @@ -12,12 +12,14 @@ public: Engine(Window* window); ~Engine() = default; - void exec(); + void init(); + + // process is called every render iteration in that while loop + void process(); private: // might get rid of this - void init(); // TODO: smart pointers probably would be smart Window* window_; diff --git a/src/main.cpp b/src/main.cpp index b2fd944..1d4ba09 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,6 +22,7 @@ int main(int argc, char *argv[]) { // maybe do some exceptions here App app = App(); + // executes for as long as the window is open return app.run(); } diff --git a/src/utils/utils.hpp b/src/utils/utils.hpp index 5e01151..67a085c 100644 --- a/src/utils/utils.hpp +++ b/src/utils/utils.hpp @@ -5,9 +5,10 @@ #include #include -// TODO: might move a lot of this into a debug.h file +// TODO: might move a lot of this into a debug.hpp file // TODO: logging ? but i dont care enough +// do i classify this up? global static functions kinda scare me but i mean otrherwise itll be a global singleton so idk namespace utils { enum DebugLevel : size_t { @@ -31,10 +32,11 @@ namespace utils { "Extra1", "Extra2" }; - // the idea is to have a debug bitmask, maybe 8 bits wide, where the bits can be set via compiler flags + // stores the input that determines which debug statements to filter inline uint8_t debugMask; + // print to standard output in a normalized format, includes the trace and debug level static void debugPrint(const char* function, int line, std::string message, size_t debugLevel) { if(!((debugMask >> debugLevel) & 1)) return; // then ignore this debug level @@ -45,14 +47,16 @@ namespace utils { return; } + // process the input from the executable (0bxxxxxxxx) static void parseDebugMaskString(std::string& debugMaskString) { std::string value = debugMaskString; - if(value.rfind("0b", 0) == 0) { + if(value.rfind("0b", 0) == 0) { // may allow other inputs in the future, this is just a binary byte value = value.substr(2); // strip the binary literal identifier + debugMask = static_cast(std::stoul(value, nullptr, 2)); // interpret a string as a uint } else { std::cout << "Unsupported debug key." << std::endl; + debugMask = 0; // disable debug statements } - debugMask = static_cast(std::stoul(value, nullptr, 2)); // interpret a string as a uint }