A Vulkan renderer in C++, built as the foundation for a game engine.
Rath is being built toward a game engine, so the renderer lives in an engine library with a separate sandbox application on top of it rather than one program. The sandbox is the first consumer of the engine's API, which keeps that API usable from outside the engine's own code.
Currently only a simple renderer exists. The direction I am interested long term is large open world rendering and generation capabilities.
- OBJ model loading with vertex deduplication
- Texture mapping
- Depth buffering
- Staging buffer uploads to GPU memory
- Frames in flight with fences and semaphores
- Swapchain recreation on resize
- Validation layers
Mipmaps and multisampling are not done yet.
The engine is a library and the sandbox is a small app that links it. Core : application loop, platform detection, defines Platform : window Renderer : Vulkan code.
Each Vulkan resource gets its own class. Image creation is a utility shared by the swapchain and textures. The device owns the command pool, since member initialization order ruled out passing it down.
The Vulkan feature path follows vulkan-tutorial.com. The engine structure, class decomposition, and build setup are my own.
Viking room by nigelgoh, licensed CC BY 4.0, taken from vulkan-tutorial.com's resized copy.
Dependencies:
- enginemath - my math library (submodule)
- GLFW - windowing and input (submodule)
- stb_image - texture loading (vendored)
- tinyobjloader - OBJ loading (vendored)
