diff options
author | tylermurphy534 <tylermurphy534@gmail.com> | 2022-09-18 21:20:51 -0400 |
---|---|---|
committer | tylermurphy534 <tylermurphy534@gmail.com> | 2022-09-18 21:20:51 -0400 |
commit | 8045b8ba04aae39a4cf9733e72413f648b6ebe2b (patch) | |
tree | f90a9bd50a2316d5077df99c9e8584afc76ed656 /engine/xe_buffer.hpp | |
download | minecraftvulkan-8045b8ba04aae39a4cf9733e72413f648b6ebe2b.tar.gz minecraftvulkan-8045b8ba04aae39a4cf9733e72413f648b6ebe2b.tar.bz2 minecraftvulkan-8045b8ba04aae39a4cf9733e72413f648b6ebe2b.zip |
stanford dragon rendering
Diffstat (limited to 'engine/xe_buffer.hpp')
-rw-r--r-- | engine/xe_buffer.hpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/engine/xe_buffer.hpp b/engine/xe_buffer.hpp new file mode 100644 index 0000000..dbbb13f --- /dev/null +++ b/engine/xe_buffer.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include "xe_device.hpp" + +namespace xe { + +class XeBuffer { + public: + XeBuffer( + XeDevice& device, + VkDeviceSize instanceSize, + uint32_t instanceCount, + VkBufferUsageFlags usageFlags, + VkMemoryPropertyFlags memoryPropertyFlags, + VkDeviceSize minOffsetAlignment = 1); + ~XeBuffer(); + + XeBuffer(const XeBuffer&) = delete; + XeBuffer& operator=(const XeBuffer&) = delete; + + VkResult map(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0); + void unmap(); + + void writeToBuffer(void* data, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0); + VkResult flush(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0); + VkDescriptorBufferInfo descriptorInfo(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0); + VkResult invalidate(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0); + + void writeToIndex(void* data, int index); + VkResult flushIndex(int index); + VkDescriptorBufferInfo descriptorInfoForIndex(int index); + VkResult invalidateIndex(int index); + + VkBuffer getBuffer() const { return buffer; } + void* getMappedMemory() const { return mapped; } + uint32_t getInstanceCount() const { return instanceCount; } + VkDeviceSize getInstanceSize() const { return instanceSize; } + VkDeviceSize getAlignmentSize() const { return instanceSize; } + VkBufferUsageFlags getUsageFlags() const { return usageFlags; } + VkMemoryPropertyFlags getMemoryPropertyFlags() const { return memoryPropertyFlags; } + VkDeviceSize getBufferSize() const { return bufferSize; } + + private: + static VkDeviceSize getAlignment(VkDeviceSize instanceSize, VkDeviceSize minOffsetAlignment); + + XeDevice& xeDevice; + void* mapped = nullptr; + VkBuffer buffer = VK_NULL_HANDLE; + VkDeviceMemory memory = VK_NULL_HANDLE; + + VkDeviceSize bufferSize; + uint32_t instanceCount; + VkDeviceSize instanceSize; + VkDeviceSize alignmentSize; + VkBufferUsageFlags usageFlags; + VkMemoryPropertyFlags memoryPropertyFlags; +}; + +} + |