ImageView wrapper.
This commit is contained in:
@@ -46,6 +46,7 @@ add_executable(vk_expe
|
|||||||
src/vk/Pipeline.cpp
|
src/vk/Pipeline.cpp
|
||||||
src/vk/Memory.cpp
|
src/vk/Memory.cpp
|
||||||
src/vk/Buffer.cpp
|
src/vk/Buffer.cpp
|
||||||
|
src/vk/ImageView.cpp
|
||||||
src/vk/Swapchain.cpp
|
src/vk/Swapchain.cpp
|
||||||
src/vk/RenderPass.cpp
|
src/vk/RenderPass.cpp
|
||||||
|
|
||||||
|
|||||||
62
src/vk/ImageView.cpp
Normal file
62
src/vk/ImageView.cpp
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
// Copyright 2022 Simon Boyé
|
||||||
|
|
||||||
|
#include <vk/ImageView.h>
|
||||||
|
#include <vk/Context.h>
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
|
||||||
|
namespace vk {
|
||||||
|
|
||||||
|
|
||||||
|
ImageView::ImageView() noexcept {
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageView::ImageView(Context& context, const VkImageViewCreateInfo& create_info)
|
||||||
|
: m_context(&context)
|
||||||
|
{
|
||||||
|
assert(m_context);
|
||||||
|
|
||||||
|
if(vkCreateImageView(
|
||||||
|
context.device(),
|
||||||
|
&create_info,
|
||||||
|
nullptr,
|
||||||
|
&m_image_view
|
||||||
|
) != VK_SUCCESS)
|
||||||
|
throw std::runtime_error("failed to create image view");
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageView::ImageView(ImageView&& other) noexcept
|
||||||
|
{
|
||||||
|
swap(*this, other);
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageView::~ImageView() noexcept {
|
||||||
|
if(!is_null())
|
||||||
|
destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ImageView& ImageView::operator=(ImageView&& other) noexcept {
|
||||||
|
swap(*this, other);
|
||||||
|
if(other)
|
||||||
|
other.destroy();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ImageView::destroy() noexcept {
|
||||||
|
assert(!is_null());
|
||||||
|
assert(m_context);
|
||||||
|
|
||||||
|
vkDestroyImageView(
|
||||||
|
m_context->device(),
|
||||||
|
m_image_view,
|
||||||
|
nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
m_image_view = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
61
src/vk/ImageView.h
Normal file
61
src/vk/ImageView.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
// Copyright 2022 Simon Boyé
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vk/forward.h>
|
||||||
|
|
||||||
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace vk {
|
||||||
|
|
||||||
|
|
||||||
|
class ImageView {
|
||||||
|
public:
|
||||||
|
ImageView() noexcept;
|
||||||
|
ImageView(Context& context, const VkImageViewCreateInfo& create_info);
|
||||||
|
ImageView(const ImageView&) = delete;
|
||||||
|
ImageView(ImageView&& other) noexcept;
|
||||||
|
~ImageView() noexcept;
|
||||||
|
|
||||||
|
ImageView& operator=(const ImageView&) = delete;
|
||||||
|
ImageView& operator=(ImageView&& other) noexcept;
|
||||||
|
|
||||||
|
explicit inline operator bool() const noexcept {
|
||||||
|
return !is_null();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool is_null() const noexcept {
|
||||||
|
return m_image_view == VK_NULL_HANDLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const Context* context() const noexcept {
|
||||||
|
return m_context;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Context* context() noexcept {
|
||||||
|
return m_context;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline operator VkImageView() noexcept {
|
||||||
|
return m_image_view;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline VkImageView image_view() noexcept {
|
||||||
|
return m_image_view;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend inline void swap(ImageView& image_view_0, ImageView& image_view_1) noexcept {
|
||||||
|
using std::swap;
|
||||||
|
swap(image_view_0.m_context, image_view_1.m_context);
|
||||||
|
swap(image_view_0.m_image_view, image_view_1.m_image_view);
|
||||||
|
}
|
||||||
|
|
||||||
|
void destroy() noexcept;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Context* m_context = nullptr;
|
||||||
|
VkImageView m_image_view = VK_NULL_HANDLE;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -293,7 +293,7 @@ void Swapchain::create() {
|
|||||||
|
|
||||||
image_resources.image = swapchain_images[index];
|
image_resources.image = swapchain_images[index];
|
||||||
|
|
||||||
VkImageViewCreateInfo view_info {
|
image_resources.view = ImageView(*m_context, VkImageViewCreateInfo {
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
||||||
.image = image_resources.image,
|
.image = image_resources.image,
|
||||||
.viewType = VK_IMAGE_VIEW_TYPE_2D,
|
.viewType = VK_IMAGE_VIEW_TYPE_2D,
|
||||||
@@ -311,16 +311,7 @@ void Swapchain::create() {
|
|||||||
.baseArrayLayer = 0,
|
.baseArrayLayer = 0,
|
||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
if(vkCreateImageView(
|
|
||||||
m_context->device(),
|
|
||||||
&view_info,
|
|
||||||
nullptr,
|
|
||||||
&image_resources.view
|
|
||||||
) != VK_SUCCESS) {
|
|
||||||
throw std::runtime_error("failed to create swapchain image view");
|
|
||||||
}
|
|
||||||
|
|
||||||
image_resources.render_done = Fence(*m_context, VK_FENCE_CREATE_SIGNALED_BIT);
|
image_resources.render_done = Fence(*m_context, VK_FENCE_CREATE_SIGNALED_BIT);
|
||||||
}
|
}
|
||||||
@@ -344,7 +335,7 @@ void Swapchain::destroy() {
|
|||||||
|
|
||||||
for(auto& image_resources: m_image_resources) {
|
for(auto& image_resources: m_image_resources) {
|
||||||
image_resources.render_done.destroy();
|
image_resources.render_done.destroy();
|
||||||
m_context->destroy_image_view(image_resources.view);
|
image_resources.view.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_context->destroy_swapchain(m_swapchain);
|
m_context->destroy_swapchain(m_swapchain);
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
// Copyright 2022 Simon Boyé
|
// Copyright 2022 Simon Boyé
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <vk/Semaphore.h>
|
|
||||||
#include <vk/Context.h>
|
#include <vk/Context.h>
|
||||||
|
#include <vk/Semaphore.h>
|
||||||
|
#include <vk/ImageView.h>
|
||||||
|
|
||||||
#include <core/utils.h>
|
#include <core/utils.h>
|
||||||
|
|
||||||
@@ -76,7 +77,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
struct ImageResources {
|
struct ImageResources {
|
||||||
VkImage image = VK_NULL_HANDLE;
|
VkImage image = VK_NULL_HANDLE;
|
||||||
VkImageView view = VK_NULL_HANDLE;
|
ImageView view;
|
||||||
Fence render_done;
|
Fence render_done;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user