// Copyright 2022 Simon Boyé #pragma once #include #include namespace vk { class RenderPass { public: RenderPass() noexcept; RenderPass(Context& context, const VkRenderPassCreateInfo& create_info); RenderPass(const RenderPass&) = delete; RenderPass(RenderPass&& other) noexcept; ~RenderPass() noexcept; RenderPass& operator=(const RenderPass&) = delete; RenderPass& operator=(RenderPass&& other) noexcept; explicit inline operator bool() const noexcept { return !is_null(); } inline bool is_null() const noexcept { return m_render_pass == VK_NULL_HANDLE; } inline operator VkRenderPass() noexcept { return m_render_pass; } inline VkRenderPass render_pass() noexcept { return m_render_pass; } friend inline void swap(RenderPass& render_pass_0, RenderPass& render_pass_1) 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); } void destroy() noexcept; private: Context* m_context = nullptr; VkRenderPass m_render_pass = VK_NULL_HANDLE; }; }