From ebe78cb4caea957a4cd7134bf46ae7f26548364f Mon Sep 17 00:00:00 2001 From: Grayson Riffe Date: Wed, 12 Feb 2025 03:24:16 -0600 Subject: [PATCH] Create synchronization objects --- .../src/client/render/RenderEngine.cpp | 19 +++++++++++++++++++ NothinFancy/src/client/render/RenderEngine.h | 6 ++++++ 2 files changed, 25 insertions(+) diff --git a/NothinFancy/src/client/render/RenderEngine.cpp b/NothinFancy/src/client/render/RenderEngine.cpp index dfe7465..c003ad1 100644 --- a/NothinFancy/src/client/render/RenderEngine.cpp +++ b/NothinFancy/src/client/render/RenderEngine.cpp @@ -27,6 +27,9 @@ namespace nf::client::render { , m_pipelineOutput() , m_commandPool() , m_commandBuffer() + , m_semaphoreImageAvailable() + , m_semaphoreRenderFinished() + , m_fenceInFlight() { NFLog("Initializing render engine"); m_window->setDisplay(m_display); @@ -39,6 +42,7 @@ namespace nf::client::render { createOutputRenderPass(); createOutputPipeline(); createCommandBuffer(); + createSynchronizationObjects(); m_window->show(); } @@ -396,7 +400,22 @@ namespace nf::client::render { NFError("Could not create command buffer."); } + void RenderEngine::createSynchronizationObjects() { + VkSemaphoreCreateInfo semaphoreCI = { VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO }; + if (vkCreateSemaphore(m_device, &semaphoreCI, nullptr, &m_semaphoreImageAvailable) != VK_SUCCESS || + vkCreateSemaphore(m_device, &semaphoreCI, nullptr, &m_semaphoreRenderFinished) != VK_SUCCESS) + NFError("Could not create semaphore."); + + VkFenceCreateInfo fenceCI = { VK_STRUCTURE_TYPE_FENCE_CREATE_INFO }; + if (vkCreateFence(m_device, &fenceCI, nullptr, &m_fenceInFlight) != VK_SUCCESS) + NFError("Could not create fence."); + } + RenderEngine::~RenderEngine() { + vkDestroyFence(m_device, m_fenceInFlight, nullptr); + vkDestroySemaphore(m_device, m_semaphoreRenderFinished, nullptr); + vkDestroySemaphore(m_device, m_semaphoreImageAvailable, nullptr); + vkDestroyCommandPool(m_device, m_commandPool, nullptr); for (int i = 0; i < m_swapchainFramebuffers.size(); i++) diff --git a/NothinFancy/src/client/render/RenderEngine.h b/NothinFancy/src/client/render/RenderEngine.h index 87c80fb..22816d4 100644 --- a/NothinFancy/src/client/render/RenderEngine.h +++ b/NothinFancy/src/client/render/RenderEngine.h @@ -19,6 +19,7 @@ namespace nf::client::render { void createOutputRenderPass(); void createOutputPipeline(); void createCommandBuffer(); + void createSynchronizationObjects(); std::shared_ptr m_window; DisplayConfig m_display; @@ -46,5 +47,10 @@ namespace nf::client::render { // Command buffers VkCommandPool m_commandPool; VkCommandBuffer m_commandBuffer; + + // Synchronization objects + VkSemaphore m_semaphoreImageAvailable; + VkSemaphore m_semaphoreRenderFinished; + VkFence m_fenceInFlight; }; }