diff options
Diffstat (limited to 'engine/xe_pipeline.cpp')
-rwxr-xr-x | engine/xe_pipeline.cpp | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/engine/xe_pipeline.cpp b/engine/xe_pipeline.cpp index e9fd4d1..7479dcb 100755 --- a/engine/xe_pipeline.cpp +++ b/engine/xe_pipeline.cpp @@ -10,22 +10,24 @@ namespace xe { - XePipeline::XePipeline( - XeDevice &device, + Pipeline::Pipeline( + Device &device, const std::string& vertFilepath, const std::string& fragFilepath, - const PipelineConfigInfo& configInfo) - : xeDevice{device} { - createGraphicsPipeline(vertFilepath, fragFilepath, configInfo); + const PipelineConfigInfo& configInfo, + std::vector<VkVertexInputAttributeDescription> &attributeDescptions, + uint32_t vertexSize + ) : xeDevice{device} { + createGraphicsPipeline(vertFilepath, fragFilepath, configInfo, attributeDescptions, vertexSize); } - XePipeline::~XePipeline() { + Pipeline::~Pipeline() { vkDestroyShaderModule(xeDevice.device(), vertShaderModule, nullptr); vkDestroyShaderModule(xeDevice.device(), fragShaderModule, nullptr); vkDestroyPipeline(xeDevice.device(), graphicsPipeline, nullptr); } - std::vector<char> XePipeline::readFile(const std::string& filepath) { + std::vector<char> Pipeline::readFile(const std::string& filepath) { std::ifstream file{filepath, std::ios::ate | std::ios::binary}; @@ -43,10 +45,13 @@ namespace xe { return buffer; }; - void XePipeline::createGraphicsPipeline( + void Pipeline::createGraphicsPipeline( const std::string& vertFilePath, const std::string& fragFilepath, - const PipelineConfigInfo& configInfo) { + const PipelineConfigInfo& configInfo, + std::vector<VkVertexInputAttributeDescription> &attributeDescptions, + uint32_t vertexSize + ) { assert( configInfo.pipelineLayout != VK_NULL_HANDLE && @@ -76,8 +81,13 @@ namespace xe { shaderStages[1].pNext = nullptr; shaderStages[1].pSpecializationInfo = nullptr; - auto bindingDescriptions = XeModel::Vertex::getBindingDescriptions(); - auto attributeDescptions = XeModel::Vertex::getAttributeDescriptions(); + VkVertexInputBindingDescription bindingDescription; + bindingDescription.binding = 0; + bindingDescription.stride = vertexSize; + bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX; + + std::vector<VkVertexInputBindingDescription> bindingDescriptions{bindingDescription}; + VkPipelineVertexInputStateCreateInfo vertexInputInfo{}; vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; vertexInputInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(attributeDescptions.size()); @@ -110,7 +120,7 @@ namespace xe { } } - void XePipeline::createShaderModule(const std::vector<char>& code, VkShaderModule* shaderModule) { + void Pipeline::createShaderModule(const std::vector<char>& code, VkShaderModule* shaderModule) { VkShaderModuleCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; createInfo.codeSize = code.size(); @@ -122,11 +132,11 @@ namespace xe { } - void XePipeline::bind(VkCommandBuffer commandBuffer) { + void Pipeline::bind(VkCommandBuffer commandBuffer) { vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline); } - void XePipeline::defaultPipelineConfigInfo(PipelineConfigInfo& configInfo) { + void Pipeline::defaultPipelineConfigInfo(PipelineConfigInfo& configInfo) { configInfo.inputAssemblyInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; configInfo.inputAssemblyInfo.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; |