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).
- Repo setup
- Hello world application
- Window creation (
glfwor 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)
- 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:
$ git clone https://git.vxbard.net/homeburger/ouros.git --recursive
Configure and build project:
$ cmake -S . -B build \
-DVULKAN_PATH="${VULKAN_INSTALL_PATH}" # either set this variable or substitute it in
$ cmake --build build -j
Execute application:
$ ./build/ouros
# or on windows:
.\build\Debug\ouros.exe
For control on debugging:
$ ./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/, primary guide, most up-to-date (2026, Vulkan v1.4)
- https://vkguide.dev/, Vulkan v1.3, but provides a lot of guidance on a more robustly architectured Vulkan app
- Will add more as I use them