#pragma once #include "core/buffer.hpp" #include "core/commandbuffer.hpp" #include "core/descriptorset.hpp" #include "core/image.hpp" #include "core/pipeline.hpp" #include "core/sampler.hpp" #include "core/shadermodule.hpp" #include "common/utils.hpp" #include #include namespace LSFG_3_1P::Shaders { using namespace LSFG; /// /// Beta shader. /// class Beta { public: Beta() = default; /// /// Initialize the shaderchain. /// /// @param inImgs Three sets of two RGBA images, corresponding to a frame count % 3. /// /// @throws LSFG::vulkan_error if resource creation fails. /// Beta(Vulkan& vk, std::array, 3> inImgs); /// /// Dispatch the shaderchain. /// void Dispatch(const Core::CommandBuffer& buf, uint64_t frameCount); /// Get the output images [[nodiscard]] const auto& getOutImages() const { return this->outImgs; } /// Trivially copyable, moveable and destructible Beta(const Beta&) noexcept = default; Beta& operator=(const Beta&) noexcept = default; Beta(Beta&&) noexcept = default; Beta& operator=(Beta&&) noexcept = default; ~Beta() = default; private: std::array shaderModules; std::array pipelines; std::array samplers; Core::Buffer buffer; std::array firstDescriptorSet; std::array descriptorSets; std::array, 3> inImgs; std::array tempImgs1; std::array tempImgs2; std::array outImgs; }; }