master
ブランチ master
VulkanExample / VulkanExample / shader / glsl.cc
1.9 KB、45行 生 Blame 履歴
1#ifdef USING_GLSL
2#include <shader/glsl.hh>
3#include <util/file.hh>
4
5Shaders::Shaders(vk::Device *device) : m_Device(device) {
6 auto vertShader = readFile("vert.spv");
7 auto fragShader = readFile("frag.spv");
8
9 vk::ShaderModuleCreateInfo vertCreateInfo = {};
10 vertCreateInfo.codeSize = vertShader.size() * sizeof(char);
11 vertCreateInfo.pCode = reinterpret_cast<const uint32_t *>(vertShader.data());
12 m_VertShaderModule = m_Device->createShaderModule(vertCreateInfo);
13
14 vk::ShaderModuleCreateInfo fragCreateInfo = {};
15 fragCreateInfo.codeSize = fragShader.size() * sizeof(char);
16 fragCreateInfo.pCode = reinterpret_cast<const uint32_t *>(fragShader.data());
17 m_FragShaderModule = m_Device->createShaderModule(fragCreateInfo);
18
19 vk::PipelineShaderStageCreateInfo vertShaderStageInfo = {};
20 vertShaderStageInfo.stage = vk::ShaderStageFlagBits::eVertex;
21 vertShaderStageInfo.module = m_VertShaderModule;
22 vertShaderStageInfo.pName = "main";
23
24 vk::PipelineShaderStageCreateInfo fragShaderStageInfo = {};
25 fragShaderStageInfo.stage = vk::ShaderStageFlagBits::eFragment;
26 fragShaderStageInfo.module = m_FragShaderModule;
27 fragShaderStageInfo.pName = "main";
28
29 m_ShaderStages.emplace_back(vertShaderStageInfo);
30 m_ShaderStages.emplace_back(fragShaderStageInfo);
31
32 m_BindingDescription = Vertex::getBindingDescription();
33 m_AttributeDescriptions = Vertex::getAttributeDescriptions();
34
35 m_VertInput.vertexBindingDescriptionCount = 1;
36 m_VertInput.pVertexBindingDescriptions = &m_BindingDescription;
37 m_VertInput.vertexAttributeDescriptionCount = static_cast<uint32_t>(m_AttributeDescriptions.size());
38 m_VertInput.pVertexAttributeDescriptions = m_AttributeDescriptions.data();
39}
40
41void Shaders::Finalize() {
42 if (m_FragShaderModule) m_Device->destroyShaderModule(m_FragShaderModule);
43 if (m_VertShaderModule) m_Device->destroyShaderModule(m_VertShaderModule);
44}
45#endif // USING_GLSL