Crafter.Graphics/examples/VulkanTriangle
2026-05-18 18:43:30 +02:00
..
closesthit.glsl vulkan triangle 2026-01-29 19:18:47 +01:00
closesthit.wgsl webgpu triangle 2026-05-18 18:43:30 +02:00
main.cpp webgpu triangle 2026-05-18 18:43:30 +02:00
miss.glsl vulkan triangle 2026-01-29 19:18:47 +01:00
miss.wgsl webgpu triangle 2026-05-18 18:43:30 +02:00
project.cpp webgpu triangle 2026-05-18 18:43:30 +02:00
raygen.glsl webgpu triangle 2026-05-18 18:43:30 +02:00
raygen.wgsl webgpu triangle 2026-05-18 18:43:30 +02:00
README.md animated example 2026-05-02 00:03:24 +02:00

VulkanTriangle

The minimal ray-traced example. Renders a single static triangle through vkCmdTraceRaysKHR. No UI.

What it shows

  • Device::Initialize() + Window + swapchain bring-up.
  • A DescriptorHeapVulkan sized for one image + one buffer slot, with slot ranges allocated via the bump-allocator API (AllocateImageSlots, AllocateBufferSlots).
  • A PipelineRTVulkan built from raygen / miss / closesthit SPIR-V shaders compiled at build time.
  • Mesh::Build constructing a BLAS and RenderingElement3D::BuildTLAS the per-frame TLAS.
  • Direct descriptor writes via vkWriteResourceDescriptorsEXT for the swapchain views and TLAS device addresses.
  • RTPass{&pipeline} plugged into window.passes — the canonical way to add ray tracing to a window in this library.

It's the smallest sensible test of the bindless VK_EXT_descriptor_heap

  • ray-tracing path.

Run

cd examples/VulkanTriangle
crafter-build -r

You should see a 1280×720 window with a triangle filling roughly the centre.

Notes

raygen.glsl's traceRayEXT call is currently commented out — the example exercises the dispatch and imageStore paths only. Uncomment it to actually trace into the BLAS.