From 7bf01a2b0633d166d3cede1c7e0d359ec74e820c Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Fri, 28 May 2021 12:34:04 +0200
Subject: [PATCH] [#40] Added two methods to get the Vulkan handles of buffers

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 include/vkcv/BufferManager.hpp | 20 ++++++++++++++++++++
 src/vkcv/BufferManager.cpp     | 20 ++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/include/vkcv/BufferManager.hpp b/include/vkcv/BufferManager.hpp
index eb8cb178..c06bd80e 100644
--- a/include/vkcv/BufferManager.hpp
+++ b/include/vkcv/BufferManager.hpp
@@ -61,6 +61,26 @@ namespace vkcv
 		 */
 		uint64_t createBuffer(BufferType type, size_t size, BufferMemoryType memoryType);
 		
+		/**
+		 * Returns the Vulkan buffer handle of a buffer
+		 * represented by a given buffer handle id.
+		 *
+		 * @param id Buffer handle id
+		 * @return Vulkan buffer handle
+		 */
+		[[nodiscard]]
+		vk::Buffer getBuffer(uint64_t id) const;
+		
+		/**
+		 * Returns the Vulkan device memory handle of a buffer
+		 * represented by a given buffer handle id.
+		 *
+		 * @param id Buffer handle id
+		 * @return Vulkan device memory handle
+		 */
+		[[nodiscard]]
+		vk::DeviceMemory getDeviceMemory(uint64_t id) const;
+		
 		/**
 		 * Fills a buffer represented by a given buffer
 		 * handle id with custom data.
diff --git a/src/vkcv/BufferManager.cpp b/src/vkcv/BufferManager.cpp
index cb2425a5..cb7c7356 100644
--- a/src/vkcv/BufferManager.cpp
+++ b/src/vkcv/BufferManager.cpp
@@ -178,6 +178,26 @@ namespace vkcv {
 		);
 	}
 	
+	vk::Buffer BufferManager::getBuffer(uint64_t id) const {
+		if (id >= m_buffers.size()) {
+			return nullptr;
+		}
+		
+		auto& buffer = m_buffers[id];
+		
+		return buffer.m_handle;
+	}
+	
+	vk::DeviceMemory BufferManager::getDeviceMemory(uint64_t id) const {
+		if (id >= m_buffers.size()) {
+			return nullptr;
+		}
+		
+		auto& buffer = m_buffers[id];
+		
+		return buffer.m_memory;
+	}
+	
 	void BufferManager::fillBuffer(uint64_t id, void *data, size_t size, size_t offset) {
 		if (size == 0) {
 			size = SIZE_MAX;
-- 
GitLab