ULRE/src/RenderDevice/Vulkan/VKPipeline.cpp

41 lines
1.4 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(Device *dev,VKPipelineData *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
data->pipelineInfo.layout = material->GetPipelineLayout();
{
data->pipelineInfo.renderPass = rt->GetRenderPass();
data->pipelineInfo.subpass = 0; //subpass由于还不知道有什么用所以暂时写0待知道功用后需改进
}
if (vkCreateGraphicsPipelines( dev->GetDevice(),
dev->GetPipelineCache(),
1,&data->pipelineInfo,
nullptr,
&graphicsPipeline) != VK_SUCCESS)
return(nullptr);
2019-04-18 16:38:58 +08:00
return(new Pipeline(dev->GetDevice(),graphicsPipeline,data->alpha_test>0,data->alpha_blend));
2019-04-18 16:38:58 +08:00
}
VK_NAMESPACE_END