From 8045b8ba04aae39a4cf9733e72413f648b6ebe2b Mon Sep 17 00:00:00 2001 From: tylermurphy534 Date: Sun, 18 Sep 2022 21:20:51 -0400 Subject: stanford dragon rendering --- engine/xe_buffer.hpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 engine/xe_buffer.hpp (limited to 'engine/xe_buffer.hpp') 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; +}; + +} + -- cgit v1.2.3-freya