diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index f79e0e96495c1e7f02c32db7cca79ef47f448d99..22f81a72b534d52c08a37cf7ef71c627ae9ffd06 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -246,13 +246,9 @@ namespace vkcv fillVertexInputDescription(vertexAttributeDescriptions, vertexBindingDescriptions, existsVertexShader, config); // Handover Containers to PipelineVertexInputStateCreateIngo Struct - vk::PipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo( - {}, - vertexBindingDescriptions.size(), - vertexBindingDescriptions.data(), - vertexAttributeDescriptions.size(), - vertexAttributeDescriptions.data() - ); + vk::PipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo = + createPipelineVertexInputStateCreateInfo(vertexAttributeDescriptions, + vertexBindingDescriptions); // input assembly state vk::PipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo( @@ -543,6 +539,13 @@ namespace vkcv return m_Device.createShaderModule(&moduleInfo, nullptr, &module); } + /** + * Fills Vertex Attribute and Binding Description with the corresponding objects form the Vertex Layout. + * @param vertexAttributeDescriptions + * @param vertexBindingDescriptions + * @param existsVertexShader + * @param config + */ void PipelineManager::fillVertexInputDescription( std::vector<vk::VertexInputAttributeDescription> &vertexAttributeDescriptions, std::vector<vk::VertexInputBindingDescription> &vertexBindingDescriptions, @@ -570,4 +573,24 @@ namespace vkcv } } } + + /** + * Create a Pipeline Vertex Input State Create Info Struct and fills it with Attribute and Binding data. + * @param vertexAttributeDescriptions + * @param vertexBindingDescriptions + * @return Pipeline Vertex Input State Create Info Struct + */ + vk::PipelineVertexInputStateCreateInfo PipelineManager::createPipelineVertexInputStateCreateInfo( + std::vector<vk::VertexInputAttributeDescription> &vertexAttributeDescriptions, + std::vector<vk::VertexInputBindingDescription> &vertexBindingDescriptions) { + + vk::PipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo( + {}, + vertexBindingDescriptions.size(), + vertexBindingDescriptions.data(), + vertexAttributeDescriptions.size(), + vertexAttributeDescriptions.data() + ); + return pipelineVertexInputStateCreateInfo; + } } diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/PipelineManager.hpp index 943255668d3bbbb22675d12f4a5223d79947fe67..9683cfc045e8518bddc48d5c418f06e4ab0af04a 100644 --- a/src/vkcv/PipelineManager.hpp +++ b/src/vkcv/PipelineManager.hpp @@ -23,12 +23,18 @@ namespace vkcv void destroyPipelineById(uint64_t id); vk::Result createShaderModule(vk::ShaderModule &module, const ShaderProgram &shaderProgram, ShaderStage stage); + void fillVertexInputDescription( std::vector<vk::VertexInputAttributeDescription> &vertexAttributeDescriptions, std::vector<vk::VertexInputBindingDescription> &vertexBindingDescriptions, const bool existsVertexShader, const PipelineConfig &config); + vk::PipelineVertexInputStateCreateInfo createPipelineVertexInputStateCreateInfo( + std::vector<vk::VertexInputAttributeDescription> &vertexAttributeDescriptions, + std::vector<vk::VertexInputBindingDescription> &vertexBindingDescriptions + ); + public: PipelineManager() = delete; // no default ctor explicit PipelineManager(vk::Device device) noexcept; // ctor