Fork of https://github.com/martty/vuk
- C++ 81.5%
- C 14.9%
- CMake 2.8%
- GLSL 0.4%
- HLSL 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github/workflows | ||
| benchmarks | ||
| bin | ||
| cmake | ||
| docs | ||
| examples | ||
| ext/renderdoc | ||
| include/vuk | ||
| src | ||
| tests | ||
| .clang-format | ||
| .gitignore | ||
| .readthedocs.yaml | ||
| CMakeLists.txt | ||
| CMakeSettings.json | ||
| LICENSE | ||
| README.md | ||
| vuk_logo.png | ||
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::Runtimeobject - 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
