Awesome
vuk - A rendergraph-based abstraction for Vulkan
Quick Start
- Grab the vuk repository
- Compile the examples
- Run the example browser and get a feel for the library
git clone http://github.com/martty/vuk
cd vuk
git submodule init
git submodule update --recursive
mkdir build
cd build
mkdir debug
cd debug
cmake ../.. -G Ninja -DVUK_BUILD_EXAMPLES=ON -DVUK_USE_DXC=OFF
cmake --build .
./vuk_all_examples
(if building with a multi-config generator, do not make the debug
folder)
Overview of using vuk
- Initialize your window(s) and Vulkan device
- Create a
vuk::Context
object - Each frame:
- Each frame, prepare high level description of your rendering, in the form of
vuk::Pass
- Bind concrete resources as inputs and outputs
- Bind managed resources (temporary resources used by the rendergraph)
- Record the execution your rendergraph into a command buffer
- Submit and present
What does vuk do
- Automatically deduces renderpasses, subpasses and framebuffers
- with all the synchronization handled for you
- including buffers
- images
- and rendertargets.
- for multiple queues
- using fine grained synchronization when possible (events)
- Automatically transitions images into proper layouts
- for renderpasses
- and commands outside of renderpasses (eg. blitting).
- Automates pipeline creation with
- optionally compiling your shaders at runtime using shaderc
- pipeline layouts and
- descriptor set layouts
- by reflecting your shaders
- and deducing parameters based on renderpass and framebuffer.
- Automates resource binding with hashmaps, reducing descriptor set allocations and updates.
- Handles temporary allocations for a frame
- Handles long-term allocations with RAII handles
- Comes with lots of sugar to simplify common operations, but still exposing the full Vulkan interface:
- Matching viewport/scissor dimensions to attachment sizes
- Simplified vertex format specification
- Blend presets
- Directly writable mapped UBOs
- Automatic management of multisampling
- Helps debugging by naming the internal resources
- dear imgui integration code