Skip to content
Snippets Groups Projects
Commit 7598c8c2 authored by Lars Hoerttrich's avatar Lars Hoerttrich
Browse files

[#31] Begin of Image class and ImageManager class, mostly taken from Buffer...

[#31] Begin of Image class and ImageManager class, mostly taken from Buffer and BufferManager classes
parent f4ec5e9e
No related branches found
No related tags found
1 merge request!32Resolve "Image-Klasse"
Pipeline #25088 passed
......@@ -24,6 +24,12 @@ set(vkcv_sources
${vkcv_include}/vkcv/BufferManager.hpp
${vkcv_source}/vkcv/BufferManager.cpp
${vkcv_include}/vkcv/Image.hpp
${vkcv_source}/vkcv/Image.cpp
${vkcv_include}/vkcv/ImageManager.hpp
${vkcv_source}/vkcv/ImageManager.cpp
${vkcv_include}/vkcv/SwapChain.hpp
${vkcv_source}/vkcv/SwapChain.cpp
......
#pragma once
/**
* @authors Lars Hoerttrich
* @file vkcv/Buffer.hpp
* @brief class for image handles
*/
#include "ImageManager.hpp"
namespace vkcv {
class Image {
public:
static Image create(ImageManager* manager);
private:
ImageManager* const m_manager;
const uint64_t m_handle_id;
Image(ImageManager* manager, uint64_t id);
};
}
#pragma once
/**
* @authors Lars Hoerttrich
* @file vkcv/ImageManager.hpp
* @brief class creating and managing images
*/
#include <vector>
#include <vulkan/vulkan.hpp>
namespace vkcv {
class Core;
class ImageManager
{
friend class Core;
private:
struct Image
{
vk::Image m_handle;
vk::DeviceMemory m_memory;
void* m_mapped = nullptr;
bool m_mappable;
};
Core* m_core;
std::vector<Image> m_images;
ImageManager() noexcept;
public:
~ImageManager() noexcept;
ImageManager(ImageManager&& other) = delete;
ImageManager(const ImageManager& other) = delete;
ImageManager& operator=(ImageManager&& other) = delete;
ImageManager& operator=(const ImageManager& other) = delete;
uint64_t createImage();
/**
* Destroys and deallocates image represented by a given
* buffer handle id.
*
* @param id Buffer handle id
*/
void destroyImage(uint64_t id);
};
}
\ No newline at end of file
/**
* @authors Lars Hoerttrich
* @file vkcv/Image.cpp
* @brief class for image handles
*/
#include "vkcv/Image.hpp"
namespace vkcv{
Image Image::create(ImageManager* manager)
{
return Image(manager, manager->createImage());
}
Image::Image(ImageManager* manager, uint64_t id) :
m_manager(manager),
m_handle_id(id)
{
}
}
/**
* @authors Lars Hoerttrich
* @file vkcv/ImageManager.cpp
* @brief class creating and managing images
*/
#include "vkcv/ImageManager.hpp"
#include "vkcv/Core.hpp"
namespace vkcv {
ImageManager::ImageManager() noexcept :
m_core(nullptr), m_images()
{
}
ImageManager::~ImageManager() noexcept {
for (size_t id = 0; id < m_images.size(); id++) {
destroyImage(id);
}
}
uint64_t ImageManager::createImage()
{
return uint64_t();
}
void ImageManager::destroyImage(uint64_t id)
{
if (id >= m_images.size()) {
return;
}
auto& image = m_images[id];
const vk::Device& device = m_core->getContext().getDevice();
if (image.m_memory) {
device.freeMemory(image.m_memory);
}
if (image.m_handle) {
device.destroyImage(image.m_handle);
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment