This is a toy project, that I used to learn basics of graphics programming and vulkan.
Project is a mess, because as I was trying and learning new stuff, some parts were added, updated and replaced, while other were written once at the start of the journey and used without any change.
Lots of stuff can be improved and fixed, features can be added, but before that some parts need to be rewritten from ground up.
Win64 binaries can be downloaded from actions.
- .NET 7.0 SDK
- Silk.NET as vulkan bindings.
- SDL2-CS as SDL bindings.
- SPIRV-Reflect to ease creation of vulkan pipelines by reading descriptors' inputs and outputs from compiled shaders.
- shaderc to compile shaders at runtime.
- VMA to help with vulkan memory management.
- Quite OK Image Format to avoid dealing with pngs.
- sdf_atlas tool to generate sdf fonts.
- RenderDoc to debug graphics.
SDL2 window.
Vulkan 1.2 renderer with primitive render graph.
Bindless ui system, everything is being drawn in one draw call. Compute shaders are being used to build vertex/index buffers and to sort ui parts by their z index. Different materials being read and compiled into one shader at runtime. Data used by different materials is being stored using arena allocator with free list.
SimpleMath library created using c# source generators.
Fully functional shader graph system. Example shader adapted from
Ui is built using my own retained mode system.

Basic deferred shading pipeline
Debug view (positions/material/normals/shaded)

