You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.5 KiB
49 lines
1.5 KiB
#pragma once
|
|
|
|
#include <vulkan/vulkan_core.h>
|
|
#include <stdexcept>
|
|
#include "vertex.hpp"
|
|
#include "vk_mem_alloc.h"
|
|
#include <memory>
|
|
#include <optional>
|
|
|
|
using std::unique_ptr;
|
|
using std::shared_ptr;
|
|
using std::make_shared;
|
|
using std::make_unique;
|
|
using std::optional;
|
|
|
|
class Image;
|
|
|
|
class Buffer {
|
|
public:
|
|
Buffer(VkDeviceSize bufferSize, VkBufferUsageFlags bufferUsage,
|
|
VmaMemoryUsage memoryUsage, VmaAllocationCreateFlags vmaAllocationFlags,
|
|
const std::string &name = "");
|
|
unique_ptr<Buffer> appended(void *data, VkDeviceSize appendSize, VkCommandBuffer commandBuffer) const;
|
|
unique_ptr<Buffer> replaced(void *data, VkDeviceSize replaceSize, VkCommandBuffer commandBuffer) const;
|
|
virtual ~Buffer();
|
|
VkBuffer handle = VK_NULL_HANDLE;
|
|
VmaAllocation allocation = VK_NULL_HANDLE;
|
|
VmaAllocationInfo allocationInfo {};
|
|
VkDeviceSize size;
|
|
void setName(const std::string &newName);
|
|
|
|
template<typename T>
|
|
T &access() {
|
|
return *reinterpret_cast<T *>(allocationInfo.pMappedData);
|
|
}
|
|
|
|
void copyTo(Buffer *buffer) const;
|
|
void copyTo(Image *image) const;
|
|
void setData(void *data, VkDeviceSize offset, VkDeviceSize dataSize, VkCommandBuffer commandBuffer = VK_NULL_HANDLE);
|
|
shared_ptr<Buffer> getStagingBuffer();
|
|
Buffer(const Buffer &other) = delete;
|
|
Buffer &operator=(const Buffer &other) = delete;
|
|
private:
|
|
optional<shared_ptr<Buffer>> stagingBufferOptional;
|
|
std::string name;
|
|
VkBufferUsageFlags bufferUsageFlags;
|
|
VmaMemoryUsage memoryUsage;
|
|
VmaAllocationCreateFlags allocationCreateFlags;
|
|
}; |