ULRE/src/RenderDevice/Vulkan/VKPipeline.cpp

41 lines
1.3 KiB
C++
Raw Normal View History

#include<hgl/graph/vulkan/VKPipeline.h>
#include<hgl/graph/vulkan/VKDevice.h>
#include<hgl/graph/vulkan/VKMaterial.h>
#include<hgl/graph/vulkan/VKRenderPass.h>
#include<hgl/graph/vulkan/VKRenderTarget.h>
#include<hgl/graph/vulkan/VKFramebuffer.h>
2019-04-18 16:38:58 +08:00
VK_NAMESPACE_BEGIN
Pipeline::~Pipeline()
{
vkDestroyPipeline(device,pipeline,nullptr);
}
Pipeline *CreatePipeline(VkDevice device,VkPipelineCache pipeline_cache,PipelineData *data,const Material *material,const RenderTarget *rt)
{
VkPipeline graphicsPipeline;
data->InitVertexInputState(material->GetStageCount(),material->GetStages());
material->Write(data->vis_create_info);
data->InitViewportState(rt->GetExtent());
2019-04-18 16:38:58 +08:00
2020-09-19 14:58:54 +08:00
data->pipeline_info.layout = material->GetPipelineLayout();
{
2020-09-19 14:58:54 +08:00
data->pipeline_info.renderPass = rt->GetRenderPass();
data->pipeline_info.subpass = 0; //subpass由于还不知道有什么用所以暂时写0待知道功用后需改进
}
if (vkCreateGraphicsPipelines( device,
pipeline_cache,
2020-09-19 14:58:54 +08:00
1,&data->pipeline_info,
nullptr,
&graphicsPipeline) != VK_SUCCESS)
return(nullptr);
2019-04-18 16:38:58 +08:00
return(new Pipeline(device,graphicsPipeline,data));
2019-04-18 16:38:58 +08:00
}
VK_NAMESPACE_END