Hammock - Vulkan graphics engine

Custom real-time physically-based graphics engine using c++23 and Vulkan - the next generation graphics API. About this project I’ve always enjoyed playing video games, but not quite like everyone else. While most people are immersed in the gameplay, I’ve always been curious about what’s happening under the hood. How do these games keep looking better and better? How is it even possible to render such detailed worlds on everyday hardware? These questions have fascinated me for as long as I can remember. ...

308 words · Matej Elias

VulkanSurfer - minimal window library for Vulkan

About this project In graphics engines and renderers, window management and event handling is often a necessary but tedious task. Most developers choose to abstract this functionality using libraries like GLFW, SDL, or similar tools. While these libraries are robust and feature-rich, they tend to be heavyweight and require installation via NuGet, vcpkg, or manual downloads. This can impact the portability of projects that rely on them. As a researcher and graphics programming enthusiast, my needs are simpler. I primarily need a window for the rendering surface and basic input handling—just enough to close the window with the Esc key or enable basic camera movement. For such straightforward requirements, using a large library often feels like overkill. Don’t get me wrong—SDL2 is excellent, and GLFW is truly amazing. But for smaller projects, their size and complexity can be unnecessary. ...

417 words · Matej Elias

Dynamic rendering in Vulkan 1.3

Introduction In this article, we explore the VK_KHR_dynamic_rendering extension, which eliminates the need for VkRenderPass and VkFramebuffer objects. By using this extension, rendering attachments (commonly referred to as render targets in other APIs) can be directly referenced before rendering begins. How It Works Before Dynamic Rendering Previously, Vulkan required you to create a render pass, specifying the types of attachments to be used. Subpass dependencies could also be defined to handle attachment transitions after the render pass finishes. For example, a subpass could transition a color attachment from VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, allowing the attachment to be used as input in another pass. ...

January 2, 2025 · 4 min · 838 words · Matej Elias