Vulkan Schnee 0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
Shader.h
Go to the documentation of this file.
1#pragma once
2
3#include <filesystem>
4#include <string>
5#include <vector>
6#include <vulkan/vulkan_core.h>
7
8
9class Shader {
10public:
11 virtual ~Shader() = default;
12 virtual void destroyShaders(VkDevice device) { }
13
14 protected:
15 void destroyShader(VkShaderModule shaderModule, const VkDevice &device);
16 VkShaderModule createShaderModule(VkDevice device, const std::vector<char> &code);
17};
18
19class ComputeShader : public Shader
20{
21public:
22 ComputeShader(VkDevice device, const std::filesystem::path& shaderPath);
23
24 void destroyShaders(VkDevice device) override;
25 [[nodiscard]] VkShaderModule getComputeShaderModule() const { return computeShaderModule; }
26
27private:
28 VkShaderModule computeShaderModule = nullptr;
29};
30
31class MeshShader : public Shader
32{
33public:
34 MeshShader(VkDevice device, const std::filesystem::path& mesh_shader_path, const std::filesystem::path& fragment_shader_path);
35 [[nodiscard]] VkShaderModule getMeshShader() const;
36 [[nodiscard]] VkShaderModule getFragmentShader() const;
37
38 void destroyShaders(VkDevice device) override;
39private:
40 VkShaderModule meshShader = nullptr;
41 VkShaderModule fragmentShader = nullptr;
42};
43
44class VertexShader : public Shader
45{
46 public:
47 VertexShader(VkDevice device, const std::filesystem::path& vertex_shader_path, const std::filesystem::path& fragment_shader_path);
48 [[nodiscard]] VkShaderModule getVertexShader() const;
49 [[nodiscard]] VkShaderModule getFragmentShader() const;
50
51 void destroyShaders(VkDevice device) override;
52private:
53 VkShaderModule vertexShader = nullptr;
54 VkShaderModule fragmentShader = nullptr;
55};
VkShaderModule getComputeShaderModule() const
Definition Shader.h:25
ComputeShader(VkDevice device, const std::filesystem::path &shaderPath)
Definition Shader.cpp:28
VkShaderModule computeShaderModule
Definition Shader.h:28
void destroyShaders(VkDevice device) override
Definition Shader.cpp:34
void destroyShaders(VkDevice device) override
Definition Shader.cpp:60
MeshShader(VkDevice device, const std::filesystem::path &mesh_shader_path, const std::filesystem::path &fragment_shader_path)
Definition Shader.cpp:40
VkShaderModule getFragmentShader() const
Definition Shader.cpp:56
VkShaderModule getMeshShader() const
Definition Shader.cpp:51
VkShaderModule fragmentShader
Definition Shader.h:41
VkShaderModule meshShader
Definition Shader.h:40
Definition Shader.h:9
void destroyShader(VkShaderModule shaderModule, const VkDevice &device)
Definition Shader.cpp:7
virtual ~Shader()=default
virtual void destroyShaders(VkDevice device)
Definition Shader.h:12
VkShaderModule createShaderModule(VkDevice device, const std::vector< char > &code)
Definition Shader.cpp:12
void destroyShaders(VkDevice device) override
Definition Shader.cpp:90
VkShaderModule vertexShader
Definition Shader.h:53
VkShaderModule getFragmentShader() const
Definition Shader.cpp:85
VkShaderModule fragmentShader
Definition Shader.h:54
VkShaderModule getVertexShader() const
Definition Shader.cpp:80
VertexShader(VkDevice device, const std::filesystem::path &vertex_shader_path, const std::filesystem::path &fragment_shader_path)
Definition Shader.cpp:67