From e3abaaf59777258ba06705135a0cafcb5918ad12 Mon Sep 17 00:00:00 2001 From: hachem Date: Wed, 19 Aug 2026 20:33:30 +0200 Subject: [feat]: vulkan is going to be the end of me bro --- src/Platform/Vulkan/VulkanRenderer.h | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/Platform/Vulkan/VulkanRenderer.h (limited to 'src/Platform/Vulkan/VulkanRenderer.h') diff --git a/src/Platform/Vulkan/VulkanRenderer.h b/src/Platform/Vulkan/VulkanRenderer.h new file mode 100644 index 0000000..9b5a23f --- /dev/null +++ b/src/Platform/Vulkan/VulkanRenderer.h @@ -0,0 +1,40 @@ +#pragma once + +#include +#include + +// Live-window Vulkan backend: owns the instance, surface, device, swapchain, +// render pass, framebuffers and per-frame synchronization, and drives the +// acquire -> record -> submit -> present loop. Pure-C++ header (no vulkan.h / +// glfw leak); the GLFW window is passed as an opaque handle. +namespace Donut +{ + // Must be called BEFORE glfwInit() when the Vulkan API is selected: points + // GLFW at the loader the app links against (GLFW's own dlopen fails on + // macOS/Homebrew) and configures the MoltenVK ICD / layer paths. + void VulkanPrepareGLFW(); + + class VulkanRenderer + { + public: + VulkanRenderer(); + ~VulkanRenderer(); + + // glfwWindow must be a GLFW window created with GLFW_NO_API. + bool Init(void* glfwWindow, int width, int height); + void Shutdown(); + + // Creates the ImGui context + Vulkan/GLFW backends. Call after Init(). + bool InitImGui(); + + // Renders + presents one frame: clears to clearColor, then (if InitImGui + // ran) opens an ImGui frame, invokes buildUI to populate it, and draws it. + void DrawFrame(const glm::vec4& clearColor, const std::function& buildUI = {}); + + void OnResize(int width, int height); + + private: + struct Impl; + Impl* m_Impl = nullptr; + }; +} -- cgit v1.3