// Copyright 2022 Simon Boyé #pragma once #include #include #include namespace vk { class Pipeline: public Wrapper { public: Pipeline() noexcept; Pipeline(Context& context, VkPipeline pipeline); Pipeline(Context& context, VkGraphicsPipelineCreateInfo create_info); Pipeline(const Pipeline&) = default; Pipeline(Pipeline&& other) noexcept; ~Pipeline() noexcept; Pipeline& operator=(const Pipeline&) = default; Pipeline& operator=(Pipeline&& other) noexcept; explicit inline operator bool() const noexcept { return !is_null(); } inline bool is_null() const noexcept { return m_pipeline == VK_NULL_HANDLE; } inline operator VkPipeline() noexcept { return m_pipeline; } inline VkPipeline pipeline() noexcept { return m_pipeline; } inline void swap(Pipeline& other) noexcept { using std::swap; 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: VkPipeline m_pipeline = VK_NULL_HANDLE; }; }