2026-04-11 01:10:34 -05:00
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-11 01:10:34 -05:00
2026-04-10 12:42:10 -05:00
2026-04-11 01:10:34 -05:00
2026-04-11 01:10:34 -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.

  • Repo setup
  • Hello world application
  • Window creation (glfw or sdl)
  • Vulkan installation
  • Hello Vulkan: instance creation
  • Device/GPU Setup
  • Graphic 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 > 3.2
  • C++20 compatible compiler (I use g++12 or MSVC++17)
  • Vulkan compatible gpu drivers (tested with an RTX3070 and an R9700)
  • SDL3
  • Will add more as the project grows

Clone respository:

$ git clone https://git.vxbard.net/homeburger/ouros.git --recursive

Configure and build project:

$ cmake -S . -B build -DSDL3_PATH="${SDL3_INSTALL_PATH}"
$ cmake --build build -j

Execute application:

$ ./build/ouros

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%