2026-04-10 02:21:42 -05:00
2026-04-10 12:42:10 -05:00
2026-04-10 12:42:10 -05:00
2026-04-11 00:24:26 -05:00
2026-04-12 16:41:27 -05:00
2026-04-12 00:19:38 -05:00
2026-04-12 16:41:27 -05:00

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 (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)
  • 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

Description
playing around with the Vulkan graphics api: a basic 3d renderer focused on performance
Readme 71 KiB
Languages
C++ 86.3%
CMake 13.7%