From bca88e51ed5e0d8fa26545db1ad56939626a3936 Mon Sep 17 00:00:00 2001
From: Pasha Bibko <156938226+PashaBibko@users.noreply.github.com>
Date: Wed, 26 Nov 2025 21:28:04 +0000
Subject: [PATCH] Added VulkanHandle
---
.idea/editor.xml | 4 +-
.idea/inspectionProfiles/Project_Default.xml | 7 +++
src/RendererTypes.h | 14 ++++++
src/main.cpp | 50 ++++++++++----------
src/managers/vulkan/VulkanManager.h | 8 ++--
src/managers/vulkan/VulkanManagerInit.cpp | 6 +--
src/managers/vulkan/VulkanManagerRender.cpp | 2 +-
7 files changed, 57 insertions(+), 34 deletions(-)
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
diff --git a/.idea/editor.xml b/.idea/editor.xml
index 14b5dc8..aa42fb7 100644
--- a/.idea/editor.xml
+++ b/.idea/editor.xml
@@ -132,8 +132,8 @@
-
-
+
+
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..65c2213
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/RendererTypes.h b/src/RendererTypes.h
index c5b0bc5..582e185 100644
--- a/src/RendererTypes.h
+++ b/src/RendererTypes.h
@@ -1,5 +1,7 @@
#pragma once
+#include
+
namespace PB::Renderer
{
struct Color
@@ -17,4 +19,16 @@ namespace PB::Renderer
constexpr Color cyan = {0.0f, 1.0f, 1.0f, 1.0f};
constexpr Color magenta = {1.0f, 0.0f, 1.0f, 1.0f};
}
+
+ class VulkanHandle
+ {
+ public:
+ VulkanHandle(void* _handle) : handle(_handle) {}
+
+ template operator Ty() { return static_cast(handle); }
+ void* get() const { return handle; }
+
+ private:
+ void* handle = nullptr;
+ };
}
diff --git a/src/main.cpp b/src/main.cpp
index 969f3e9..75d6f8d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -32,35 +32,37 @@ int main()
CleanupAllAndExit(EXIT_FAILURE);
/* Adds runtime objects */
- VulkanManager::CreateNewRenderObject
- (
- Colors::red, Mesh
- {
- .vertices =
+ {
+ VulkanManager::CreateNewRenderObject
+ (
+ Colors::red, Mesh
{
- 0.0f, -0.5f,
- 0.5f, 0.9f,
- -0.5f, 0.5f
- },
+ .vertices =
+ {
+ 0.0f, -0.5f,
+ 0.5f, 0.9f,
+ -0.5f, 0.5f
+ },
- .indices = { 0, 1, 2 }
- }
- );
+ .indices = { 0, 1, 2 }
+ }
+ );
- VulkanManager::CreateNewRenderObject
- (
- Colors::yellow, Mesh
- {
- .vertices =
+ VulkanManager::CreateNewRenderObject
+ (
+ Colors::yellow, Mesh
{
- -0.9f, 0.0f,
- -0.9f, -0.9f,
- 0.0f, -0.9f
- },
+ .vertices =
+ {
+ -0.9f, 0.0f,
+ -0.9f, -0.9f,
+ 0.0f, -0.9f
+ },
- .indices = { 0, 1, 2 }
- }
- );
+ .indices = { 0, 1, 2 }
+ }
+ );
+ }
/* Polls window events whilst it is still open */
while (!glfwWindowShouldClose(window))
diff --git a/src/managers/vulkan/VulkanManager.h b/src/managers/vulkan/VulkanManager.h
index 6adec26..3ba9cc2 100644
--- a/src/managers/vulkan/VulkanManager.h
+++ b/src/managers/vulkan/VulkanManager.h
@@ -92,7 +92,7 @@ namespace PB::Renderer
*/
static bool RenderPass(GLFWwindow* window);
- static void CreateNewRenderObject(Color color, Mesh mesh);
+ static void CreateNewRenderObject(Color color, const Mesh& mesh);
private:
// === Internal helper structs === //
@@ -141,9 +141,9 @@ namespace PB::Renderer
// === Vulkan init helpers === //
- static bool IsDeviceSuitable(const VkPhysicalDevice& device);
- static QueueFamilyIndices FindQueueFamilies(const VkPhysicalDevice& device);
- static bool CheckDeviceExtensionSupport(const VkPhysicalDevice& device);
+ static bool IsDeviceSuitable(VulkanHandle device);
+ static QueueFamilyIndices FindQueueFamilies(VulkanHandle device);
+ static bool CheckDeviceExtensionSupport(VulkanHandle device);
static SwapChainSupportDetails QuerySwapChainSupport();
static VkSurfaceFormatKHR ChooseSurfaceFormat(const std::vector& availableFormats);
diff --git a/src/managers/vulkan/VulkanManagerInit.cpp b/src/managers/vulkan/VulkanManagerInit.cpp
index 55d9198..39521de 100644
--- a/src/managers/vulkan/VulkanManagerInit.cpp
+++ b/src/managers/vulkan/VulkanManagerInit.cpp
@@ -259,7 +259,7 @@ namespace PB::Renderer
return false;
}
- bool VulkanManager::IsDeviceSuitable(const VkPhysicalDevice& device)
+ bool VulkanManager::IsDeviceSuitable(VulkanHandle device)
{
const QueueFamilyIndices indices = FindQueueFamilies(device);
@@ -281,7 +281,7 @@ namespace PB::Renderer
return indices.Complete() && swapChainAdequate && discreteGPU;
}
- VulkanManager::QueueFamilyIndices VulkanManager::FindQueueFamilies(const VkPhysicalDevice& device)
+ VulkanManager::QueueFamilyIndices VulkanManager::FindQueueFamilies(VulkanHandle device)
{
QueueFamilyIndices indices;
@@ -316,7 +316,7 @@ namespace PB::Renderer
return indices;
}
- bool VulkanManager::CheckDeviceExtensionSupport(const VkPhysicalDevice& device)
+ bool VulkanManager::CheckDeviceExtensionSupport(VulkanHandle device)
{
const std::vector REQUIRED_EXTENSIONS = {
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
diff --git a/src/managers/vulkan/VulkanManagerRender.cpp b/src/managers/vulkan/VulkanManagerRender.cpp
index 398e08c..3d79f2f 100644
--- a/src/managers/vulkan/VulkanManagerRender.cpp
+++ b/src/managers/vulkan/VulkanManagerRender.cpp
@@ -19,7 +19,7 @@ namespace PB::Renderer
}
}
- void VulkanManager::CreateNewRenderObject(const Color color, Mesh mesh)
+ void VulkanManager::CreateNewRenderObject(const Color color, const Mesh& mesh)
{
RenderObject obj{};
obj.IndexCount = mesh.indices.size();