Files
OpenVulkano/openVulkanoCpp/Vulkan/Scene/VulkanShader.hpp

44 lines
1.0 KiB
C++

/*
* 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 <vulkan/vulkan.hpp>
#include "../../Scene/Shader.hpp"
#include "../../Base/ICloseable.hpp"
#include "../Resources/IShaderOwner.hpp"
#include "IRecordable.hpp"
namespace openVulkanoCpp::Vulkan
{
class Context;
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();
};
}