diff --git a/include/vkcv/BufferManager.hpp b/include/vkcv/BufferManager.hpp index eb8cb178d1b844fff57892c7312ed71d325900cc..abda720f98f649d64b17a15848ae99320e11ae3e 100644 --- a/include/vkcv/BufferManager.hpp +++ b/include/vkcv/BufferManager.hpp @@ -6,6 +6,7 @@ namespace vkcv { enum class BufferType { + INDEX, VERTEX, UNIFORM, STORAGE, @@ -61,6 +62,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 cb2425a51ee177d062120b0eb61ae089f6f1692f..cb7c7356aef589ee8aef03b904d48021bdb75057 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;