Integrating ImGui Into a Renderer-in-Progress
Field note. The pipeline shift that turns a renderer into an editor: render-to-texture into an ImGui image, the Vulkan backend you have to write yourself, and input-capture gating.
Build in public
A rendering laboratory, content platform, and public learning journey.
Experiments in modern rendering — Vulkan via Silk.NET, a functional core, and an imperative shell. Every technique ships as working code and a companion post that explains why it exists.
Every confirmed post, in order. Status reflects the current state of the draft — not a promise of when it will ship.
From a blank window to a composed frame.
Motivation and context. Limitations of existing engines, friction with OOP, rendering as data transformation, and the Functional Core + Imperative Shell pattern.
Read post →A minimal modern rendering pipeline in C# and Vulkan. Device, swapchain, shaders, handles, descriptors, and the first render command — explained from the ground up.
Read post →The G-Buffer and the geometry pass. Why deferred over forward, multi-render-target setup, G-Buffer layout, and writing scene data without a single light.
Read draft →The lighting pass and the render graph. Reading from the G-Buffer, composing passes as pure data, and an immutable representation of the frame.
Read draft →A deferred pipeline earns its lights.
First fully lit scene. Diffuse and specular terms, surface normals from the G-Buffer, and basic material response.
Read draft →Scaling lights in deferred shading. Light volumes, attenuation, and per-light accumulation in the lighting pass.
Read draft →Completing the basic lighting model — and making clear how crude constant ambient really is. Sets up the motivation for ambient occlusion.
Read draft →Infrastructure decisions and architecture records.
Field note. Decision record for adopting VMA. Three copies of FindMemoryType, paired tuple lifetimes, ImGui destroy-then-reallocate on resize.
Read draft →Field note. Why the lab uses FIFO_RELAXED with MinImageCount instead of the AAA Mailbox default — honest frame-time signal over smoothed presentation.
Read draft →Field note. The pipeline shift that turns a renderer into an editor: render-to-texture into an ImGui image, the Vulkan backend you have to write yourself, and input-capture gating.