Skip to content

Commit

Permalink
Update documentation.
Browse files Browse the repository at this point in the history
  • Loading branch information
stripe2933 committed Sep 23, 2024
1 parent aeff8f3 commit 0672581
Show file tree
Hide file tree
Showing 3 changed files with 174 additions and 214 deletions.
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ A set of Vulkan utilities based on RAII idiom and Modern C++ features.
- Bootstrapping for physical device, device and VMA allocator generation with fully customizable configurations and compile time safety.
- Automatic physical device selection based on queue family and extension requirements.
- Show accepted/rejected physical devices with your requirements.
- Templated descriptor set layout, automatic descriptor write inferring and pool size estimation.
- Templated descriptor set layout, compile-time descriptor write type inferring and pool size estimation.
- Managing multiple attachment image and views with MSAA and `VK_KHR_dynamic_rendering` support.
- Combining runtime shader compilation, shader loading and pipeline creation to single function.
- Executing hierarchical commands across the multiple queues with most efficient way using `VK_KHR_timeline_semaphore`, by runtime dependency graph solver.
Expand All @@ -35,20 +35,20 @@ I wrote several Vulkan projects using *vku*.

### Build Steps

*vku* can be used with CMake `find_package`, `FetchContent`, `CPM.cmake` or vcpkg (using overlay ports). See [Using vku](docs/using-vku.md) for details.
*vku* can be used with CMake `find_package`, `FetchContent`, `CPM.cmake` or vcpkg (using overlay ports). See [Using vku](docs/using-vku.md) page for the details.

> [!NOTE]
> *vku* can only be used with overlay ports when using vcpkg for now. I'm currently planning for make *vku* to be available with vcpkg official ports.
### Tutorials

For library users' best understanding, I wrote step-by-step tutorials for building some Vulkan applications using *vku*. For each step, it first shows how Vulkan-Hpp (with RAII binding) does, then which portion of the code can be simplified with *vku*. I really recommend you to read them.
I wrote step-by-step tutorials of building some Vulkan applications using *vku* for best understanding. For each tutorial, it first shows how Vulkan-Hpp (with RAII binding) does, then which portion of the code can be simplified using *vku*. I really recommend you to read them.

| Tutorial | Description |
|:-------------------------------------------------------------------------------------------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ![Tutorial 1](docs/images/hello-triangle/final.png)<br>[Hello Triangle](docs/hello-triangle.md) | It demonstrates the most simplest Vulkan application with graphics operation, rendering a colored triangle onto image, and additionally persist the image into the file.<br><br>You'll learn: <br><ul><li>Boostrapping physical device, device and VMA allocator creation with `vku::Gpu<QueueFamilies, Queues>`.</li><li>Creating RAII buffer (`vku::MappedBuffer`) and image (`vku::AllocatedImage`).</li><li>Creating graphics pipeline with *vku* way.</li><li>Executing a single command with *vku*.</li></ul> |
| ![Tutorial 2](docs/images/hello-triangle-window/final.png)<br>Hello Triangle Window (In Progress) | It renders the triangle in a resizable GLFW window.<br><br>You'll learn: <ul><li>Customizing `vku::Gpu` queue family selection configuration.</li><li>Use `vku::AttachmentGroup` to manage multiple swapchain images into single object.</li><li>Structuring your Vulkan project into separated single-responsibility classes.</li><li>Implementing Frames in flight.</li></ul> |
| ![Tutorial 3](docs/images/rotating-box/final.png)<br>Rotating Box (In Progress) | It renders a textured rotating box with 4x MSAA.<br><br>You'll learn: <ul><li>Use `vku::MsaaAttachmentGroup` to manage the whole color/depth/swapchain images at once.</li><li>Creating typed descriptor set layout with `vku::DescriptorSet`.</li><li>Estimating the required descriptor pool size from descriptor sets automatically by `vku::PoolSize`.</li><li>Infer the required descriptor writes using `vku::DescriptorSet<DescriptorSetLayout>`.</li></ul> |
| Tutorial | Description |
|:-------------------------------------------------------------------------------------------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ![Tutorial 1](docs/images/hello-triangle/final.png)<br>[Hello Triangle](docs/hello-triangle.md) | It demonstrates the most simplest Vulkan application with graphics operation, rendering a colored triangle onto image, and additionally persist the image into the file.<br><br>You'll learn: <br><ul><li>Bootstrapping physical device, device and VMA allocator creation with `vku::Gpu<QueueFamilies, Queues>`.</li><li>Creating RAII buffer (`vku::MappedBuffer`) and image (`vku::AllocatedImage`).</li><li>Creating graphics pipeline with predefined states (`vku::getDefaultGraphicsPipelineCreateInfo`).</li><li>Allocate command buffer, record commands, then submit it at once (`vku::executeSingleCommand`)</li></ul> |
| ![Tutorial 2](docs/images/hello-triangle-window/final.png)<br>Hello Triangle Window (In Progress) | It renders the triangle in a resizable GLFW window.<br><br>You'll learn: <ul><li>Customizing `vku::Gpu` queue family selection configuration.</li><li>Use `vku::AttachmentGroup` to manage multiple swapchain images and image views into single object.</li><li>Structuring your Vulkan project by separating the objects into the single-responsibility classes.</li><li>Implementing Frames in flight.</li></ul> |
| ![Tutorial 3](docs/images/rotating-box/final.png)<br>Rotating Box (In Progress) | It renders a textured rotating box with 4x MSAA.<br><br>You'll learn: <ul><li>Use `vku::MsaaAttachmentGroup` to manage the whole color/resolve/depth/swapchain images at once.</li><li>Creating typed descriptor set layout with `vku::DescriptorSet<vk::DescriptorType...>`.</li><li>Estimating the required descriptor pool size from descriptor sets automatically using `vku::PoolSize`.</li><li>Use inferred descriptor write type with `vku::DescriptorSet<DescriptorSetLayout>`.</li></ul> |

### Tests

Expand Down
Loading

0 comments on commit 0672581

Please sign in to comment.