diff options
Diffstat (limited to 'engine/xe_pipeline.hpp')
-rwxr-xr-x | engine/xe_pipeline.hpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/engine/xe_pipeline.hpp b/engine/xe_pipeline.hpp new file mode 100755 index 0000000..06bcf0f --- /dev/null +++ b/engine/xe_pipeline.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include "xe_device.hpp" + +#include <cstdint> +#include <string> +#include <vector> +#include <vulkan/vulkan_core.h> + +namespace xe { + +struct PipelineConfigInfo { + PipelineConfigInfo(const PipelineConfigInfo&) = delete; + PipelineConfigInfo& operator=(const PipelineConfigInfo&) = delete; + + VkPipelineViewportStateCreateInfo viewportInfo; + VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo; + VkPipelineRasterizationStateCreateInfo rasterizationInfo; + VkPipelineMultisampleStateCreateInfo multisampleInfo; + VkPipelineColorBlendAttachmentState colorBlendAttachment; + VkPipelineColorBlendStateCreateInfo colorBlendInfo; + VkPipelineDepthStencilStateCreateInfo depthStencilInfo; + std::vector<VkDynamicState> dynamicStateEnables; + VkPipelineDynamicStateCreateInfo dynamicStateInfo; + VkPipelineLayout pipelineLayout = nullptr; + VkRenderPass renderPass = nullptr; + uint32_t subpass = 0; +}; + +class XePipeline { + public: + XePipeline( + XeDevice &device, + const std::string& vertFilepath, + const std::string& fragFilepath, + const PipelineConfigInfo& configInfo); + ~XePipeline(); + + XePipeline(const XePipeline&) = delete; + XePipeline operator=(const XePipeline&) = delete; + + void bind(VkCommandBuffer commandBuffer); + static void defaultPipelineConfigInfo(PipelineConfigInfo& configInfo); + + private: + static std::vector<char> readFile(const std::string& filePath); + + void createGraphicsPipeline( + const std::string& vertFilePath, + const std::string& fragFilepath, + const PipelineConfigInfo& configInfo); + + void createShaderModule(const std::vector<char>& code, VkShaderModule* shaderModule); + + XeDevice& xeDevice; + VkPipeline graphicsPipeline; + VkShaderModule vertShaderModule; + VkShaderModule fragShaderModule; +}; + +}
\ No newline at end of file |