# ouros Ouros is a rudimentary 3D rendering application built with C++ utilizing the Vulkan API for blazing fast rasterization and shading. This is mainly for tinkering around, so don't expect the most performant and clean code. I will be using the amazing Sascha Willems's https://howtovulkan.com/ guide as a platform. ## Some design philosphies: - Cross platform (Windown & Linux, Debian in my case) - Minimal external libraries. Some libraries are unavoidable, especially for a project with a large scope. Libraries for window creation, matrix math, and device interfacing are inevitable, but dependency complexity is usually a problem. - Compartmentalization: units should be separated a part from each other as mushc as possible to reduce codebase complexity. eg, the renderer should be completely separate from a keyboard interface. - Performance tracking: since Vulkan is absurdly configurable, different options need to be able to be profiled to determine the best option - Configurability: being able to change things without a rebuild is in general good practice. I like yaml - Fun: if its a pain to maintain then you're doing it wrong - shmunguss ## Roadmap Below is some steps to organize development plan and future goals, mostly following Sascha's guide. Might change once I know what I'm doing (I won't). - [x] Repo setup - [x] Hello world application - [x] Window creation (~~glfw~~ or sdl) - [ ] Vulkan installation - [ ] Hello Vulkan: instance creation - [ ] Device/GPU Setup - [ ] Graphics pipeline -> swapchain - [ ] Shaders - [ ] Hello triangle - [ ] 3D - [ ] Texture loader - [ ] Model Loader - [ ] Mouse/Keyboard inputs Below is beyond Sascha's guide, but available elsewhere on his github. These are more long term ideas. - [ ] Lighting - [ ] Shadows (via Shadow Mapping) - [ ] Compute Shading - [ ] Raytracing - [ ] Graphical User Interfacing - [ ] Post-Processing Effects - [ ] Procedural Generation - [ ] Particles ## Build instructions ### Dependencies: - 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) - SDL3 (im using version 3.4.4) - Will add more as the project grows ### Clone respository: ```bash $ git clone https://git.vxbard.net/homeburger/ouros.git --recursive ``` ### Configure and build project: ```bash $ cmake -S . -B build -DSDL3_PATH="${SDL3_INSTALL_PATH}" # either set this variable or substitute it in $ cmake --build build -j ``` ### Execute application: ```bash $ ./build/ouros # or on windows: .\build\Debug\ouros.exe ``` For control on debugging: ```bash $ ./build/ouros --debug 0b00111111 ``` where each bit in the mask corresponds to a debug level, in order: unused, unused, fatal, trace, error, warning, notice, and info. `0b1111111` enables all debug messages. ## Additional Resources - https://howtovulkan.com/ - Will add more as I use them