Vulkan Schnee 0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
Shader.cpp
Go to the documentation of this file.
2#include <vector>
4#include <stdexcept>
6
7void Shader::destroyShader(VkShaderModule shaderModule, const VkDevice &device)
8{
9 vkDestroyShaderModule(device, shaderModule, nullptr);
10}
11
12VkShaderModule Shader::createShaderModule(VkDevice device, const std::vector<char>& code)
13{
14 VkShaderModuleCreateInfo createInfo{};
15 createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
16 createInfo.codeSize = code.size();
17 createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
18
19 VkShaderModule shaderModule;
20 if(vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS)
21 {
22 throw std::runtime_error("failed to create shader module!");
23 }
24
25 return shaderModule;
26}
27
28ComputeShader::ComputeShader(VkDevice device, const std::filesystem::path& shaderPath)
29{
30 const std::vector<char> shader_content = FileHandler::readFile(shaderPath.string());
31 computeShaderModule = createShaderModule(device, shader_content);
32 VulkanHelper::setObjectName(device, computeShaderModule, "Compute shader module");
33}
34void ComputeShader::destroyShaders(VkDevice device)
35{
38}
39
40MeshShader::MeshShader(VkDevice device,
41 const std::filesystem::path& mesh_shader_path,
42 const std::filesystem::path& fragment_shader_path)
43{
44 const std::vector<char> meshShaderCode = FileHandler::readFile(mesh_shader_path.string());
45 const std::vector<char> fragShaderCode = FileHandler::readFile(fragment_shader_path.string());
46
47 meshShader = createShaderModule(device, meshShaderCode);
48 fragmentShader = createShaderModule(device, fragShaderCode);
49}
50
51VkShaderModule MeshShader::getMeshShader() const
52{
53 return meshShader;
54}
55
56VkShaderModule MeshShader::getFragmentShader() const
57{
58 return fragmentShader;
59}
60void MeshShader::destroyShaders(VkDevice device)
61{
65}
66
68 VkDevice device,
69 const std::filesystem::path & vertex_shader_path,
70 const std::filesystem::path & fragment_shader_path
71)
72{
73 const std::vector<char> vertexShaderCode = FileHandler::readFile(vertex_shader_path.string());
74 const std::vector<char> fragShaderCode = FileHandler::readFile(fragment_shader_path.string());
75
76 vertexShader = createShaderModule(device, vertexShaderCode);
77 fragmentShader = createShaderModule(device, fragShaderCode);
78}
79
80VkShaderModule VertexShader::getVertexShader() const
81{
82 return vertexShader;
83}
84
85VkShaderModule VertexShader::getFragmentShader() const
86{
87 return fragmentShader;
88}
89
90void VertexShader::destroyShaders( VkDevice device )
91{
92 Shader::destroyShaders( device );
95}
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
static std::vector< char > readFile(const std::string &filename)
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
void destroyShader(VkShaderModule shaderModule, const VkDevice &device)
Definition Shader.cpp:7
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
static void setObjectName(VkDevice device, VulkanObjectType objectHandle, const std::string &name)