diff --git a/a.out b/a.out index 7b85d9f..6b96b74 100755 Binary files a/a.out and b/a.out differ diff --git a/cve_pipeline.cpp b/cve_pipeline.cpp index a5bb23c..20014da 100644 --- a/cve_pipeline.cpp +++ b/cve_pipeline.cpp @@ -36,10 +36,24 @@ namespace cve { std::cout << "Fragment shader code size: " << fragCode.size() << '\n'; } - void createShaderModule(const std::vector& code, VkShaderModule *shaderModule) { + void CvePipeline::createShaderModule(const std::vector& code, VkShaderModule *shaderModule) { VkShaderModuleCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; createInfo.codeSize = code.size(); createInfo.pCode = reinterpret_cast(code.data()); + + if (vkCreateShaderModule(cveDevice.device(), &createInfo, nullptr, shaderModule) != VK_SUCCESS) { + throw std::runtime_error("Failed to create shader module."); + } + } + + PipelineConfigInfo CvePipeline::defaultPipelineConfigInfo(uint32_t width, uint32_t height) { + PipelineConfigInfo configInfo{}; + + configInfo.inputAssemblyInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + configInfo.inputAssemblyInfo.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + configInfo.inputAssemblyInfo.primitiveRestartEnable = VK_FALSE; + + return configInfo; } } diff --git a/cve_pipeline.hpp b/cve_pipeline.hpp index 4fcd144..fa8c2b1 100644 --- a/cve_pipeline.hpp +++ b/cve_pipeline.hpp @@ -7,7 +7,7 @@ namespace cve { struct PipelineConfigInfo { - + VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo{}; }; class CvePipeline { public: diff --git a/first_app.hpp b/first_app.hpp index 8c14bab..b7b7cc7 100644 --- a/first_app.hpp +++ b/first_app.hpp @@ -2,6 +2,7 @@ #include "cve_window.hpp" #include "cve_pipeline.hpp" +#include "cve_device.hpp" namespace cve { class FirstApp { @@ -12,7 +13,8 @@ namespace cve { void run(); private: CveWindow cveWindow{WIDTH, HEIGHT, "Hello Vulkan!"}; - CvePipeline cvePipeline{"shaders/simple_shader.vert.spv", - "shaders/simple_shader.frag.spv"}; + CveDevice cveDevice{cveWindow}; + CvePipeline cvePipeline{cveDevice, "shaders/simple_shader.vert.spv", + "shaders/simple_shader.frag.spv", CvePipeline::defaultPipelineConfigInfo(WIDTH, HEIGHT)}; }; }