diff --git a/src/vk/Buffer.cpp b/src/vk/Buffer.cpp index 41231ba..6402eee 100644 --- a/src/vk/Buffer.cpp +++ b/src/vk/Buffer.cpp @@ -21,7 +21,7 @@ Buffer::Buffer( VkDeviceSize size, VkBufferUsageFlags usage ) - : m_context(&context) + : Wrapper(context) { assert(*m_context); @@ -51,13 +51,8 @@ Buffer::Buffer( allocate_and_bind_memory(memory_properties); } -Buffer::Buffer(Buffer&& other) noexcept - : m_context(other.m_context) - , m_buffer(other.m_buffer) - , m_memory(std::move(other.m_memory)) -{ - other.m_context = nullptr; - other.m_buffer = VK_NULL_HANDLE; +Buffer::Buffer(Buffer&& other) noexcept { + swap(other); } Buffer::~Buffer() noexcept { @@ -68,12 +63,9 @@ Buffer::~Buffer() noexcept { } Buffer& Buffer::operator=(Buffer&& other) noexcept { - if(&other != this) { - using std::swap; - swap(m_context, other.m_context); - swap(m_buffer, other.m_buffer); - swap(m_memory, other.m_memory); - } + swap(other); + if(other) + other.destroy(); return *this; } diff --git a/src/vk/Buffer.h b/src/vk/Buffer.h index a495d49..1db6ded 100644 --- a/src/vk/Buffer.h +++ b/src/vk/Buffer.h @@ -3,6 +3,7 @@ #include #include +#include #include @@ -15,7 +16,7 @@ namespace vk { -class Buffer { +class Buffer: public Wrapper { public: Buffer() noexcept; Buffer( @@ -29,11 +30,11 @@ public: VkBufferUsageFlags usage, VkMemoryPropertyFlags memory_properties ); - Buffer(const Buffer&) = delete; + Buffer(const Buffer&) = default; Buffer(Buffer&& other) noexcept; ~Buffer() noexcept; - Buffer& operator=(const Buffer&) = delete; + Buffer& operator=(const Buffer&) = default; Buffer& operator=(Buffer&& other) noexcept; inline explicit operator bool() const { @@ -44,14 +45,6 @@ public: return m_buffer == VK_NULL_HANDLE; } - inline Context* context() noexcept { - return m_context; - } - - inline const Context* context() const noexcept { - return m_context; - } - inline operator VkBuffer() const noexcept { return m_buffer; } @@ -76,10 +69,20 @@ public: void upload(size_t size, void* src_buffer, uint32_t dst_queue_family); + inline void swap(Buffer& other) noexcept { + using std::swap; + Wrapper::swap(other); + swap(m_buffer, other.m_buffer); + swap(m_memory, other.m_memory); + } + + friend inline void swap(Buffer& buffer_0, Buffer& buffer_1) noexcept { + buffer_0.swap(buffer_1); + } + void destroy() noexcept; private: - Context* m_context = nullptr; VkBuffer m_buffer = VK_NULL_HANDLE; MemoryBlock m_memory; }; diff --git a/src/vk/CommandBuffer.cpp b/src/vk/CommandBuffer.cpp index 76e6325..933ad0d 100644 --- a/src/vk/CommandBuffer.cpp +++ b/src/vk/CommandBuffer.cpp @@ -13,7 +13,7 @@ CommandBuffer::CommandBuffer() noexcept { } CommandBuffer::CommandBuffer(Context& context, VkCommandPool command_pool, VkCommandBufferLevel level) - : m_context(&context) + : Wrapper(context) , m_command_pool(command_pool) { assert(m_context); @@ -35,7 +35,7 @@ CommandBuffer::CommandBuffer(Context& context, VkCommandPool command_pool, VkCom CommandBuffer::CommandBuffer(CommandBuffer&& other) noexcept { - swap(*this, other); + swap(other); } CommandBuffer::~CommandBuffer() noexcept { @@ -45,7 +45,7 @@ CommandBuffer::~CommandBuffer() noexcept { CommandBuffer& CommandBuffer::operator=(CommandBuffer&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/CommandBuffer.h b/src/vk/CommandBuffer.h index 678342f..c316b6c 100644 --- a/src/vk/CommandBuffer.h +++ b/src/vk/CommandBuffer.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include @@ -9,15 +10,15 @@ namespace vk { -class CommandBuffer { +class CommandBuffer: public Wrapper { public: CommandBuffer() noexcept; CommandBuffer(Context& context, VkCommandPool command_pool, VkCommandBufferLevel level=VK_COMMAND_BUFFER_LEVEL_PRIMARY); - CommandBuffer(const CommandBuffer&) = delete; + CommandBuffer(const CommandBuffer&) = default; CommandBuffer(CommandBuffer&& other) noexcept; ~CommandBuffer() noexcept; - CommandBuffer& operator=(const CommandBuffer&) = delete; + CommandBuffer& operator=(const CommandBuffer&) = default; CommandBuffer& operator=(CommandBuffer&& other) noexcept; explicit inline operator bool() const noexcept { @@ -28,14 +29,6 @@ public: return m_command_buffer == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline const VkCommandPool command_pool() const noexcept { return m_command_pool; } @@ -52,17 +45,20 @@ public: return m_command_buffer; } - friend inline void swap(CommandBuffer& command_buffer_0, CommandBuffer& command_buffer_1) noexcept { + inline void swap(CommandBuffer& other) noexcept { using std::swap; - swap(command_buffer_0.m_context, command_buffer_1.m_context); - swap(command_buffer_0.m_command_pool, command_buffer_1.m_command_pool); - swap(command_buffer_0.m_command_buffer, command_buffer_1.m_command_buffer); + Wrapper::swap(other); + swap(m_command_pool, other.m_command_pool); + swap(m_command_buffer, other.m_command_buffer); + } + + friend inline void swap(CommandBuffer& command_buffer_0, CommandBuffer& command_buffer_1) noexcept { + command_buffer_0.swap(command_buffer_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkCommandPool m_command_pool = VK_NULL_HANDLE; VkCommandBuffer m_command_buffer = VK_NULL_HANDLE; }; diff --git a/src/vk/CommandPool.cpp b/src/vk/CommandPool.cpp index 7ee30ea..a3f2c0e 100644 --- a/src/vk/CommandPool.cpp +++ b/src/vk/CommandPool.cpp @@ -13,7 +13,7 @@ CommandPool::CommandPool() noexcept { } CommandPool::CommandPool(Context& context, uint32_t queue_family, VkCommandPoolCreateFlags flags) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -33,7 +33,7 @@ CommandPool::CommandPool(Context& context, uint32_t queue_family, VkCommandPoolC CommandPool::CommandPool(CommandPool&& other) noexcept { - swap(*this, other); + swap(other); } CommandPool::~CommandPool() noexcept { @@ -43,7 +43,7 @@ CommandPool::~CommandPool() noexcept { CommandPool& CommandPool::operator=(CommandPool&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/CommandPool.h b/src/vk/CommandPool.h index 7038d14..c2f816c 100644 --- a/src/vk/CommandPool.h +++ b/src/vk/CommandPool.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include @@ -9,15 +10,15 @@ namespace vk { -class CommandPool { +class CommandPool: public Wrapper { public: CommandPool() noexcept; CommandPool(Context& context, uint32_t queue_family, VkCommandPoolCreateFlags flags=0); - CommandPool(const CommandPool&) = delete; + CommandPool(const CommandPool&) = default; CommandPool(CommandPool&& other) noexcept; ~CommandPool() noexcept; - CommandPool& operator=(const CommandPool&) = delete; + CommandPool& operator=(const CommandPool&) = default; CommandPool& operator=(CommandPool&& other) noexcept; explicit inline operator bool() const noexcept { @@ -28,14 +29,6 @@ public: return m_command_pool == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkCommandPool() noexcept { return m_command_pool; } @@ -44,16 +37,19 @@ public: return m_command_pool; } - friend inline void swap(CommandPool& command_pool_0, CommandPool& command_pool_1) noexcept { + inline void swap(CommandPool& other) noexcept { using std::swap; - swap(command_pool_0.m_context, command_pool_1.m_context); - swap(command_pool_0.m_command_pool, command_pool_1.m_command_pool); + Wrapper::swap(other); + swap(m_command_pool, other.m_command_pool); + } + + friend inline void swap(CommandPool& command_pool_0, CommandPool& command_pool_1) noexcept { + command_pool_0.swap(command_pool_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkCommandPool m_command_pool = VK_NULL_HANDLE; }; diff --git a/src/vk/DescriptorPool.cpp b/src/vk/DescriptorPool.cpp index ae5dc99..1e7f36c 100644 --- a/src/vk/DescriptorPool.cpp +++ b/src/vk/DescriptorPool.cpp @@ -18,7 +18,7 @@ DescriptorPool::DescriptorPool( Array pool_sizes, VkDescriptorPoolCreateFlags flags ) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -40,7 +40,7 @@ DescriptorPool::DescriptorPool( DescriptorPool::DescriptorPool(DescriptorPool&& other) noexcept { - swap(*this, other); + swap(other); } DescriptorPool::~DescriptorPool() noexcept { @@ -50,7 +50,7 @@ DescriptorPool::~DescriptorPool() noexcept { DescriptorPool& DescriptorPool::operator=(DescriptorPool&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/DescriptorPool.h b/src/vk/DescriptorPool.h index ea8d939..8b5b687 100644 --- a/src/vk/DescriptorPool.h +++ b/src/vk/DescriptorPool.h @@ -4,6 +4,7 @@ #include #include +#include #include @@ -11,7 +12,7 @@ namespace vk { -class DescriptorPool { +class DescriptorPool: public Wrapper { public: DescriptorPool() noexcept; DescriptorPool( @@ -20,11 +21,11 @@ public: Array pool_sizes, VkDescriptorPoolCreateFlags flags=0 ); - DescriptorPool(const DescriptorPool&) = delete; + DescriptorPool(const DescriptorPool&) = default; DescriptorPool(DescriptorPool&& other) noexcept; ~DescriptorPool() noexcept; - DescriptorPool& operator=(const DescriptorPool&) = delete; + DescriptorPool& operator=(const DescriptorPool&) = default; DescriptorPool& operator=(DescriptorPool&& other) noexcept; explicit inline operator bool() const noexcept { @@ -35,14 +36,6 @@ public: return m_descriptor_pool == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkDescriptorPool() noexcept { return m_descriptor_pool; } @@ -51,16 +44,19 @@ public: return m_descriptor_pool; } - friend inline void swap(DescriptorPool& descriptor_pool_0, DescriptorPool& descriptor_pool_1) noexcept { + inline void swap(DescriptorPool& other) noexcept { using std::swap; - swap(descriptor_pool_0.m_context, descriptor_pool_1.m_context); - swap(descriptor_pool_0.m_descriptor_pool, descriptor_pool_1.m_descriptor_pool); + Wrapper::swap(other); + swap(m_descriptor_pool, other.m_descriptor_pool); + } + + friend inline void swap(DescriptorPool& descriptor_pool_0, DescriptorPool& descriptor_pool_1) noexcept { + descriptor_pool_0.swap(descriptor_pool_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkDescriptorPool m_descriptor_pool = VK_NULL_HANDLE; }; diff --git a/src/vk/DescriptorSetLayout.cpp b/src/vk/DescriptorSetLayout.cpp index 51e1c78..e076aab 100644 --- a/src/vk/DescriptorSetLayout.cpp +++ b/src/vk/DescriptorSetLayout.cpp @@ -13,7 +13,7 @@ DescriptorSetLayout::DescriptorSetLayout() noexcept { } DescriptorSetLayout::DescriptorSetLayout(Context& context, Array bindings) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -33,7 +33,7 @@ DescriptorSetLayout::DescriptorSetLayout(Context& context, Array #include +#include #include @@ -11,15 +12,15 @@ namespace vk { -class DescriptorSetLayout { +class DescriptorSetLayout: public Wrapper { public: DescriptorSetLayout() noexcept; DescriptorSetLayout(Context& context, Array bindings); - DescriptorSetLayout(const DescriptorSetLayout&) = delete; + DescriptorSetLayout(const DescriptorSetLayout&) = default; DescriptorSetLayout(DescriptorSetLayout&& other) noexcept; ~DescriptorSetLayout() noexcept; - DescriptorSetLayout& operator=(const DescriptorSetLayout&) = delete; + DescriptorSetLayout& operator=(const DescriptorSetLayout&) = default; DescriptorSetLayout& operator=(DescriptorSetLayout&& other) noexcept; explicit inline operator bool() const noexcept { @@ -30,14 +31,6 @@ public: return m_descriptor_set_layout == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkDescriptorSetLayout() noexcept { return m_descriptor_set_layout; } @@ -46,16 +39,19 @@ public: return m_descriptor_set_layout; } - friend inline void swap(DescriptorSetLayout& descriptor_set_layout_0, DescriptorSetLayout& descriptor_set_layout_1) noexcept { + inline void swap(DescriptorSetLayout& other) noexcept { using std::swap; - swap(descriptor_set_layout_0.m_context, descriptor_set_layout_1.m_context); - swap(descriptor_set_layout_0.m_descriptor_set_layout, descriptor_set_layout_1.m_descriptor_set_layout); + Wrapper::swap(other); + swap(m_descriptor_set_layout, other.m_descriptor_set_layout); + } + + friend inline void swap(DescriptorSetLayout& descriptor_set_layout_0, DescriptorSetLayout& descriptor_set_layout_1) noexcept { + descriptor_set_layout_0.swap(descriptor_set_layout_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkDescriptorSetLayout m_descriptor_set_layout = VK_NULL_HANDLE; }; diff --git a/src/vk/Fence.cpp b/src/vk/Fence.cpp index 2080292..f65bb48 100644 --- a/src/vk/Fence.cpp +++ b/src/vk/Fence.cpp @@ -13,7 +13,7 @@ Fence::Fence() noexcept { } Fence::Fence(Context& context, VkFenceCreateFlags flags) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -32,7 +32,7 @@ Fence::Fence(Context& context, VkFenceCreateFlags flags) Fence::Fence(Fence&& other) noexcept { - swap(*this, other); + swap(other); } Fence::~Fence() noexcept { @@ -42,7 +42,7 @@ Fence::~Fence() noexcept { Fence& Fence::operator=(Fence&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/Fence.h b/src/vk/Fence.h index 80f05d4..9ceccd2 100644 --- a/src/vk/Fence.h +++ b/src/vk/Fence.h @@ -4,6 +4,7 @@ #include #include +#include #include @@ -11,15 +12,15 @@ namespace vk { -class Fence { +class Fence: public Wrapper { public: Fence() noexcept; Fence(Context& context, VkFenceCreateFlags flags=0); - Fence(const Fence&) = delete; + Fence(const Fence&) = default; Fence(Fence&& other) noexcept; ~Fence() noexcept; - Fence& operator=(const Fence&) = delete; + Fence& operator=(const Fence&) = default; Fence& operator=(Fence&& other) noexcept; explicit inline operator bool() const noexcept { @@ -30,14 +31,6 @@ public: return m_fence == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkFence() noexcept { return m_fence; } @@ -50,16 +43,19 @@ public: void reset(); void wait(uint64_t timeout=UINT64_MAX) const; - friend inline void swap(Fence& fence_0, Fence& fence_1) noexcept { + inline void swap(Fence& other) noexcept { using std::swap; - swap(fence_0.m_context, fence_1.m_context); - swap(fence_0.m_fence, fence_1.m_fence); + Wrapper::swap(other); + swap(m_fence, other.m_fence); + } + + friend inline void swap(Fence& fence_0, Fence& fence_1) noexcept { + fence_0.swap(fence_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkFence m_fence = VK_NULL_HANDLE; }; diff --git a/src/vk/Framebuffer.cpp b/src/vk/Framebuffer.cpp index 497c0e8..0ca840e 100644 --- a/src/vk/Framebuffer.cpp +++ b/src/vk/Framebuffer.cpp @@ -18,7 +18,7 @@ Framebuffer::Framebuffer( Array attachments, uint32_t width, uint32_t height, uint32_t layers ) - : m_context(&context) + : Wrapper(context) { assert(m_context); assert(render_pass); @@ -52,7 +52,7 @@ Framebuffer::Framebuffer( Framebuffer::Framebuffer(Framebuffer&& other) noexcept { - swap(*this, other); + swap(other); } Framebuffer::~Framebuffer() noexcept { @@ -62,7 +62,7 @@ Framebuffer::~Framebuffer() noexcept { Framebuffer& Framebuffer::operator=(Framebuffer&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/Framebuffer.h b/src/vk/Framebuffer.h index 920b22e..21c2ff5 100644 --- a/src/vk/Framebuffer.h +++ b/src/vk/Framebuffer.h @@ -4,6 +4,7 @@ #include #include +#include #include @@ -11,7 +12,7 @@ namespace vk { -class Framebuffer { +class Framebuffer: public Wrapper { public: Framebuffer() noexcept; Framebuffer( @@ -26,11 +27,11 @@ public: Array attachments, VkExtent2D extent, uint32_t layers=1 ); - Framebuffer(const Framebuffer&) = delete; + Framebuffer(const Framebuffer&) = default; Framebuffer(Framebuffer&& other) noexcept; ~Framebuffer() noexcept; - Framebuffer& operator=(const Framebuffer&) = delete; + Framebuffer& operator=(const Framebuffer&) = default; Framebuffer& operator=(Framebuffer&& other) noexcept; explicit inline operator bool() const noexcept { @@ -41,14 +42,6 @@ public: return m_framebuffer == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkFramebuffer() noexcept { return m_framebuffer; } @@ -57,16 +50,19 @@ public: return m_framebuffer; } - friend inline void swap(Framebuffer& framebuffer_0, Framebuffer& framebuffer_1) noexcept { + inline void swap(Framebuffer& other) noexcept { using std::swap; - swap(framebuffer_0.m_context, framebuffer_1.m_context); - swap(framebuffer_0.m_framebuffer, framebuffer_1.m_framebuffer); + Wrapper::swap(other); + swap(m_framebuffer, other.m_framebuffer); + } + + friend inline void swap(Framebuffer& framebuffer_0, Framebuffer& framebuffer_1) noexcept { + framebuffer_0.swap(framebuffer_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkFramebuffer m_framebuffer = VK_NULL_HANDLE; }; diff --git a/src/vk/ImageView.cpp b/src/vk/ImageView.cpp index 3926234..4ca65e6 100644 --- a/src/vk/ImageView.cpp +++ b/src/vk/ImageView.cpp @@ -13,7 +13,7 @@ ImageView::ImageView() noexcept { } ImageView::ImageView(Context& context, const VkImageViewCreateInfo& create_info) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -28,7 +28,7 @@ ImageView::ImageView(Context& context, const VkImageViewCreateInfo& create_info) ImageView::ImageView(ImageView&& other) noexcept { - swap(*this, other); + swap(other); } ImageView::~ImageView() noexcept { @@ -38,7 +38,7 @@ ImageView::~ImageView() noexcept { ImageView& ImageView::operator=(ImageView&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/ImageView.h b/src/vk/ImageView.h index 90e5e8f..84c0917 100644 --- a/src/vk/ImageView.h +++ b/src/vk/ImageView.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include @@ -9,15 +10,15 @@ namespace vk { -class ImageView { +class ImageView: public Wrapper { public: ImageView() noexcept; ImageView(Context& context, const VkImageViewCreateInfo& create_info); - ImageView(const ImageView&) = delete; + ImageView(const ImageView&) = default; ImageView(ImageView&& other) noexcept; ~ImageView() noexcept; - ImageView& operator=(const ImageView&) = delete; + ImageView& operator=(const ImageView&) = default; ImageView& operator=(ImageView&& other) noexcept; explicit inline operator bool() const noexcept { @@ -28,14 +29,6 @@ public: 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; } @@ -44,16 +37,19 @@ public: return m_image_view; } - friend inline void swap(ImageView& image_view_0, ImageView& image_view_1) noexcept { + inline void swap(ImageView& other) 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); + Wrapper::swap(other); + swap(m_image_view, other.m_image_view); + } + + friend inline void swap(ImageView& image_view_0, ImageView& image_view_1) noexcept { + image_view_0.swap(image_view_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkImageView m_image_view = VK_NULL_HANDLE; }; diff --git a/src/vk/Pipeline.cpp b/src/vk/Pipeline.cpp index 246d270..8505149 100644 --- a/src/vk/Pipeline.cpp +++ b/src/vk/Pipeline.cpp @@ -13,7 +13,7 @@ Pipeline::Pipeline() noexcept { } Pipeline::Pipeline(Context& context, VkPipeline pipeline) - : m_context(&context) + : Wrapper(context) , m_pipeline(pipeline) { assert(m_context); @@ -21,7 +21,7 @@ Pipeline::Pipeline(Context& context, VkPipeline pipeline) } Pipeline::Pipeline(Context& context, VkGraphicsPipelineCreateInfo create_info) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -37,7 +37,7 @@ Pipeline::Pipeline(Context& context, VkGraphicsPipelineCreateInfo create_info) Pipeline::Pipeline(Pipeline&& other) noexcept { - swap(*this, other); + swap(other); } Pipeline::~Pipeline() noexcept { @@ -47,7 +47,7 @@ Pipeline::~Pipeline() noexcept { Pipeline& Pipeline::operator=(Pipeline&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/Pipeline.h b/src/vk/Pipeline.h index cf8a692..b54b4d2 100644 --- a/src/vk/Pipeline.h +++ b/src/vk/Pipeline.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include @@ -9,16 +10,16 @@ namespace vk { -class Pipeline { +class Pipeline: public Wrapper { public: Pipeline() noexcept; Pipeline(Context& context, VkPipeline pipeline); Pipeline(Context& context, VkGraphicsPipelineCreateInfo create_info); - Pipeline(const Pipeline&) = delete; + Pipeline(const Pipeline&) = default; Pipeline(Pipeline&& other) noexcept; ~Pipeline() noexcept; - Pipeline& operator=(const Pipeline&) = delete; + Pipeline& operator=(const Pipeline&) = default; Pipeline& operator=(Pipeline&& other) noexcept; explicit inline operator bool() const noexcept { @@ -29,14 +30,6 @@ public: return m_pipeline == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkPipeline() noexcept { return m_pipeline; } @@ -45,16 +38,19 @@ public: return m_pipeline; } - friend inline void swap(Pipeline& pipeline_0, Pipeline& pipeline_1) noexcept { + inline void swap(Pipeline& other) noexcept { using std::swap; - swap(pipeline_0.m_context, pipeline_1.m_context); - swap(pipeline_0.m_pipeline, pipeline_1.m_pipeline); + Wrapper::swap(other); + swap(m_pipeline, other.m_pipeline); + } + + friend inline void swap(Pipeline& pipeline_0, Pipeline& pipeline_1) noexcept { + pipeline_0.swap(pipeline_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkPipeline m_pipeline = VK_NULL_HANDLE; }; diff --git a/src/vk/PipelineLayout.cpp b/src/vk/PipelineLayout.cpp index bf9ab46..26e8de5 100644 --- a/src/vk/PipelineLayout.cpp +++ b/src/vk/PipelineLayout.cpp @@ -17,7 +17,7 @@ PipelineLayout::PipelineLayout( Array set_layouts, Array push_constant_ranges ) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -39,7 +39,7 @@ PipelineLayout::PipelineLayout( PipelineLayout::PipelineLayout(PipelineLayout&& other) noexcept { - swap(*this, other); + swap(other); } PipelineLayout::~PipelineLayout() noexcept { @@ -49,7 +49,7 @@ PipelineLayout::~PipelineLayout() noexcept { PipelineLayout& PipelineLayout::operator=(PipelineLayout&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/PipelineLayout.h b/src/vk/PipelineLayout.h index afd6c60..83b17d5 100644 --- a/src/vk/PipelineLayout.h +++ b/src/vk/PipelineLayout.h @@ -4,6 +4,7 @@ #include #include +#include #include @@ -11,7 +12,7 @@ namespace vk { -class PipelineLayout { +class PipelineLayout: public Wrapper { public: PipelineLayout() noexcept; PipelineLayout( @@ -19,11 +20,11 @@ public: Array set_layouts, Array push_constant_ranges={} ); - PipelineLayout(const PipelineLayout&) = delete; + PipelineLayout(const PipelineLayout&) = default; PipelineLayout(PipelineLayout&& other) noexcept; ~PipelineLayout() noexcept; - PipelineLayout& operator=(const PipelineLayout&) = delete; + PipelineLayout& operator=(const PipelineLayout&) = default; PipelineLayout& operator=(PipelineLayout&& other) noexcept; explicit inline operator bool() const noexcept { @@ -34,14 +35,6 @@ public: return m_pipeline_layout == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkPipelineLayout() noexcept { return m_pipeline_layout; } @@ -50,16 +43,19 @@ public: return m_pipeline_layout; } - friend inline void swap(PipelineLayout& pipeline_layout_0, PipelineLayout& pipeline_layout_1) noexcept { + inline void swap(PipelineLayout& other) noexcept { using std::swap; - swap(pipeline_layout_0.m_context, pipeline_layout_1.m_context); - swap(pipeline_layout_0.m_pipeline_layout, pipeline_layout_1.m_pipeline_layout); + Wrapper::swap(other); + swap(m_pipeline_layout, other.m_pipeline_layout); + } + + friend inline void swap(PipelineLayout& pipeline_layout_0, PipelineLayout& pipeline_layout_1) noexcept { + pipeline_layout_0.swap(pipeline_layout_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkPipelineLayout m_pipeline_layout = VK_NULL_HANDLE; }; diff --git a/src/vk/RenderPass.cpp b/src/vk/RenderPass.cpp index 8c4d3ff..6a73a30 100644 --- a/src/vk/RenderPass.cpp +++ b/src/vk/RenderPass.cpp @@ -13,7 +13,7 @@ RenderPass::RenderPass() noexcept { } RenderPass::RenderPass(Context& context, const VkRenderPassCreateInfo& create_info) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -28,7 +28,7 @@ RenderPass::RenderPass(Context& context, const VkRenderPassCreateInfo& create_in RenderPass::RenderPass(RenderPass&& other) noexcept { - swap(*this, other); + swap(other); } RenderPass::~RenderPass() noexcept { @@ -38,7 +38,7 @@ RenderPass::~RenderPass() noexcept { RenderPass& RenderPass::operator=(RenderPass&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/RenderPass.h b/src/vk/RenderPass.h index 3814262..e9cca2b 100644 --- a/src/vk/RenderPass.h +++ b/src/vk/RenderPass.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include @@ -9,15 +10,15 @@ namespace vk { -class RenderPass { +class RenderPass: public Wrapper { public: RenderPass() noexcept; RenderPass(Context& context, const VkRenderPassCreateInfo& create_info); - RenderPass(const RenderPass&) = delete; + RenderPass(const RenderPass&) = default; RenderPass(RenderPass&& other) noexcept; ~RenderPass() noexcept; - RenderPass& operator=(const RenderPass&) = delete; + RenderPass& operator=(const RenderPass&) = default; RenderPass& operator=(RenderPass&& other) noexcept; explicit inline operator bool() const noexcept { @@ -36,16 +37,19 @@ public: return m_render_pass; } - friend inline void swap(RenderPass& render_pass_0, RenderPass& render_pass_1) noexcept { + inline void swap(RenderPass& other) noexcept { using std::swap; - swap(render_pass_0.m_context, render_pass_1.m_context); - swap(render_pass_0.m_render_pass, render_pass_1.m_render_pass); + Wrapper::swap(other); + swap(m_render_pass, other.m_render_pass); + } + + friend inline void swap(RenderPass& render_pass_0, RenderPass& render_pass_1) noexcept { + render_pass_0.swap(render_pass_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkRenderPass m_render_pass = VK_NULL_HANDLE; }; diff --git a/src/vk/Semaphore.cpp b/src/vk/Semaphore.cpp index 0c84ca7..ca37f60 100644 --- a/src/vk/Semaphore.cpp +++ b/src/vk/Semaphore.cpp @@ -13,7 +13,7 @@ Semaphore::Semaphore() noexcept { } Semaphore::Semaphore(Context& context) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -31,7 +31,7 @@ Semaphore::Semaphore(Context& context) Semaphore::Semaphore(Semaphore&& other) noexcept { - swap(*this, other); + swap(other); } Semaphore::~Semaphore() noexcept { @@ -41,7 +41,7 @@ Semaphore::~Semaphore() noexcept { Semaphore& Semaphore::operator=(Semaphore&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/Semaphore.h b/src/vk/Semaphore.h index c7a280f..3d9949c 100644 --- a/src/vk/Semaphore.h +++ b/src/vk/Semaphore.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include @@ -9,15 +10,15 @@ namespace vk { -class Semaphore { +class Semaphore: public Wrapper { public: Semaphore() noexcept; Semaphore(Context& context); - Semaphore(const Semaphore&) = delete; + Semaphore(const Semaphore&) = default; Semaphore(Semaphore&& other) noexcept; ~Semaphore() noexcept; - Semaphore& operator=(const Semaphore&) = delete; + Semaphore& operator=(const Semaphore&) = default; Semaphore& operator=(Semaphore&& other) noexcept; explicit inline operator bool() const noexcept { @@ -28,14 +29,6 @@ public: return m_semaphore == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkSemaphore() noexcept { return m_semaphore; } @@ -44,16 +37,19 @@ public: return m_semaphore; } - friend inline void swap(Semaphore& semaphore_0, Semaphore& semaphore_1) noexcept { + inline void swap(Semaphore& other) noexcept { using std::swap; - swap(semaphore_0.m_context, semaphore_1.m_context); - swap(semaphore_0.m_semaphore, semaphore_1.m_semaphore); + Wrapper::swap(other); + swap(m_semaphore, other.m_semaphore); + } + + friend inline void swap(Semaphore& semaphore_0, Semaphore& semaphore_1) noexcept { + semaphore_0.swap(semaphore_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkSemaphore m_semaphore = VK_NULL_HANDLE; }; diff --git a/src/vk/ShaderModule.cpp b/src/vk/ShaderModule.cpp index 6bd976b..7467b65 100644 --- a/src/vk/ShaderModule.cpp +++ b/src/vk/ShaderModule.cpp @@ -13,7 +13,7 @@ ShaderModule::ShaderModule() noexcept { } ShaderModule::ShaderModule(Context& context, const std::vector& code) - : m_context(&context) + : Wrapper(context) { assert(m_context); @@ -37,7 +37,7 @@ ShaderModule::ShaderModule(Context& context, const char* path) ShaderModule::ShaderModule(ShaderModule&& other) noexcept { - swap(*this, other); + swap(other); } ShaderModule::~ShaderModule() noexcept { @@ -47,7 +47,7 @@ ShaderModule::~ShaderModule() noexcept { ShaderModule& ShaderModule::operator=(ShaderModule&& other) noexcept { - swap(*this, other); + swap(other); if(other) other.destroy(); return *this; diff --git a/src/vk/ShaderModule.h b/src/vk/ShaderModule.h index a8748ca..bed6abd 100644 --- a/src/vk/ShaderModule.h +++ b/src/vk/ShaderModule.h @@ -1,26 +1,27 @@ // Copyright 2022 Simon Boyé #pragma once -#include - #include +#include #include +#include + namespace vk { -class ShaderModule { +class ShaderModule: public Wrapper { public: ShaderModule() noexcept; ShaderModule(Context& context, const std::vector& code); ShaderModule(Context& context, const char* path); - ShaderModule(const ShaderModule&) = delete; + ShaderModule(const ShaderModule&) = default; ShaderModule(ShaderModule&& other) noexcept; ~ShaderModule() noexcept; - ShaderModule& operator=(const ShaderModule&) = delete; + ShaderModule& operator=(const ShaderModule&) = default; ShaderModule& operator=(ShaderModule&& other) noexcept; explicit inline operator bool() const noexcept { @@ -31,14 +32,6 @@ public: return m_shader_module == VK_NULL_HANDLE; } - inline const Context* context() const noexcept { - return m_context; - } - - inline Context* context() noexcept { - return m_context; - } - inline operator VkShaderModule() noexcept { return m_shader_module; } @@ -47,16 +40,19 @@ public: return m_shader_module; } - friend inline void swap(ShaderModule& shader_module_0, ShaderModule& shader_module_1) noexcept { + inline void swap(ShaderModule& other) noexcept { using std::swap; - swap(shader_module_0.m_context, shader_module_1.m_context); - swap(shader_module_0.m_shader_module, shader_module_1.m_shader_module); + Wrapper::swap(other); + swap(m_shader_module, other.m_shader_module); + } + + friend inline void swap(ShaderModule& shader_module_0, ShaderModule& shader_module_1) noexcept { + shader_module_0.swap(shader_module_1); } void destroy() noexcept; private: - Context* m_context = nullptr; VkShaderModule m_shader_module = VK_NULL_HANDLE; };