Files
Copium/Vulkan/src/Shader.h
T
2023-02-07 20:58:58 +01:00

39 lines
1.2 KiB
C++

#pragma once
#include <shaderc/shaderc.hpp>
#include "Common.h"
#include "Instance.h"
namespace Copium
{
class Shader final
{
CP_DELETE_COPY_AND_MOVE_CTOR(Shader);
public:
enum class Type
{
GlslFile, GlslCode, SpvFile, SpvCode
};
private:
Instance& instance;
VkShaderModule vertShaderModule;
VkShaderModule fragShaderModule;
std::vector<VkPipelineShaderStageCreateInfo> shaderStages;
public:
Shader(Instance& instance, Type type, const std::string& vertexInput, const std::string& fragmentInput);
~Shader();
const std::vector<VkPipelineShaderStageCreateInfo> GetShaderStages() const;
private:
VkShaderModule InitializeShaderModule(const std::vector<uint32_t>& codeSpv);
VkShaderModule InitializeShaderModule(const std::string& codeSpv);
VkShaderModule InitializeShaderModule(const std::vector<char>& codeSpv);
VkShaderModule InitializeShaderModuleFromGlslFile(const std::string& filename, shaderc_shader_kind type);
VkShaderModule InitializeShaderModuleFromGlslCode(const std::string& code, shaderc_shader_kind type);
VkShaderModule InitializeShaderModule(const uint32_t* data, size_t size);
};
}