diff --git a/include/Nazara/VulkanRenderer/VulkanRenderPipeline.hpp b/include/Nazara/VulkanRenderer/VulkanRenderPipeline.hpp index 76836708e..aed7b6769 100644 --- a/include/Nazara/VulkanRenderer/VulkanRenderPipeline.hpp +++ b/include/Nazara/VulkanRenderer/VulkanRenderPipeline.hpp @@ -11,22 +11,36 @@ #include #include #include +#include namespace Nz { class NAZARA_VULKANRENDERER_API VulkanRenderPipeline : public RenderPipeline { public: + struct CreateInfo; + VulkanRenderPipeline(Vk::DeviceHandle device, RenderPipelineInfo pipelineInfo); ~VulkanRenderPipeline() = default; - static VkPipelineColorBlendAttachmentState BuildColorBlendState(const RenderPipelineInfo& pipelineInfo); + static std::vector BuildColorBlendAttachmentState(const RenderPipelineInfo& pipelineInfo); static VkPipelineDepthStencilStateCreateInfo BuildDepthStencilInfo(const RenderPipelineInfo& pipelineInfo); static VkPipelineInputAssemblyStateCreateInfo BuildInputAssemblyInfo(const RenderPipelineInfo& pipelineInfo); static VkPipelineRasterizationStateCreateInfo BuildRasterizationInfo(const RenderPipelineInfo& pipelineInfo); static VkStencilOpState BuildStencilOp(const RenderPipelineInfo& pipelineInfo, bool front); + static std::vector BuildShaderStageInfo(const RenderPipelineInfo& pipelineInfo); + static CreateInfo BuildCreateInfo(const RenderPipelineInfo& pipelineInfo); + + struct CreateInfo + { + std::vector colorBlendAttachmentState; + std::vector shaderStages; + VkGraphicsPipelineCreateInfo createInfo; + }; private: + + Vk::DeviceHandle m_device; RenderPipelineInfo m_pipelineInfo; }; diff --git a/src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp b/src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp index 71daf7eaa..1071f7573 100644 --- a/src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp +++ b/src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp @@ -16,7 +16,7 @@ namespace Nz { } - VkPipelineColorBlendAttachmentState VulkanRenderPipeline::BuildColorBlendState(const RenderPipelineInfo& pipelineInfo) + /*VkPipelineColorBlendAttachmentState VulkanRenderPipeline::BuildColorBlendAttachmentState(const RenderPipelineInfo& pipelineInfo) { VkPipelineColorBlendAttachmentState colorBlendStates; colorBlendStates.blendEnable = pipelineInfo.blending; @@ -29,7 +29,7 @@ namespace Nz { blendState.dstAlphaBlendFactor }*/ - } + /*} else { colorBlendStates.srcColorBlendFactor = VK_BLEND_FACTOR_ONE; @@ -40,7 +40,7 @@ namespace Nz colorBlendStates.alphaBlendOp = VK_BLEND_OP_ADD; } return colorBlendStates; - } + }*/ VkPipelineDepthStencilStateCreateInfo VulkanRenderPipeline::BuildDepthStencilInfo(const RenderPipelineInfo& pipelineInfo) { @@ -92,4 +92,17 @@ namespace Nz return stencilStates; } + + std::vector VulkanRenderPipeline::BuildShaderStageInfo(const RenderPipelineInfo& pipelineInfo) + { + std::vector shaderStageCreateInfos; + + for (auto&& stagePtr : pipelineInfo.shaderStages) + { + VkPipelineShaderStageCreateInfo& createInfo = shaderStageCreateInfos.emplace_back(); + //createInfo. + } + + return shaderStageCreateInfos; + } }