/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #pragma once #include #include "../../Base/ICloseable.hpp" #include "IRecordable.hpp" namespace openVulkanoCpp { namespace Scene { class Shader; } namespace Vulkan { class Context; class IShaderOwner; struct VulkanShader final : virtual public ICloseable, virtual public IRecordable { Scene::Shader* shader = nullptr; vk::Device device; vk::ShaderModule shaderModuleVertex, shaderModuleFragment; vk::Pipeline pipeline; IShaderOwner* owner; Context* context; VulkanShader() = default; ~VulkanShader() override { if (shader) VulkanShader::Close(); } void Init(Context* context, Scene::Shader* shader, IShaderOwner* owner); void Resize(); void Record(vk::CommandBuffer& cmdBuffer, uint32_t bufferId) override; void Close() override; private: void BuildPipeline(); }; } }