-
Tobias Frisch authored
Signed-off-by:
Tobias Frisch <tfrisch@uni-koblenz.de>
Tobias Frisch authoredSigned-off-by:
Tobias Frisch <tfrisch@uni-koblenz.de>
BufferManager.hpp 3.76 KiB
#pragma once
/**
* @authors Tobias Frisch, Alexander Gauggel, Artur Wasmut, Lars Hoerttrich, Sebastian Gaida
* @file vkcv/BufferManager.hpp
* @brief Manager to handle buffer operations.
*/
#include <vector>
#include <vulkan/vulkan.hpp>
#include <vk_mem_alloc.hpp>
#include "Handles.hpp"
namespace vkcv
{
enum class BufferType {
INDEX,
VERTEX,
UNIFORM,
STORAGE,
STAGING,
INDIRECT
};
enum class BufferMemoryType {
DEVICE_LOCAL,
HOST_VISIBLE
};
class Core;
class BufferManager
{
friend class Core;
private:
struct Buffer
{
vk::Buffer m_handle;
vma::Allocation m_allocation;
size_t m_size = 0;
bool m_mappable = false;
};
Core* m_core;
std::vector<Buffer> m_buffers;
BufferHandle m_stagingBuffer;
BufferManager() noexcept;
void init();
/**
* Destroys and deallocates buffer represented by a given
* buffer handle id.
*
* @param id Buffer handle id
*/
void destroyBufferById(uint64_t id);
public:
~BufferManager() noexcept;
BufferManager(BufferManager&& other) = delete;
BufferManager(const BufferManager& other) = delete;
BufferManager& operator=(BufferManager&& other) = delete;
BufferManager& operator=(const BufferManager& other) = delete;
/**