Create a copy for PipelineData while CreatePipeline
This commit is contained in:
parent
ec7194ee13
commit
3bdf9bbb77
@ -25,6 +25,8 @@ protected:
|
|||||||
|
|
||||||
ObjectList<Pipeline> pipeline_list;
|
ObjectList<Pipeline> pipeline_list;
|
||||||
|
|
||||||
|
Pipeline *CreatePipeline(Material *,PipelineData *,const VAB *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
friend class DeviceRenderPassManage;
|
friend class DeviceRenderPassManage;
|
||||||
@ -52,13 +54,13 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Pipeline *CreatePipeline(MaterialInstance *, PipelineData *);
|
Pipeline *CreatePipeline(MaterialInstance *, const PipelineData *);
|
||||||
Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &);
|
Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &, const Prim &prim,const bool prim_restart=false);
|
Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &, const Prim &prim,const bool prim_restart=false);
|
||||||
Pipeline *CreatePipeline(MaterialInstance *, PipelineData *, const Prim &prim,const bool prim_restart=false);
|
Pipeline *CreatePipeline(MaterialInstance *, const PipelineData *, const Prim &prim,const bool prim_restart=false);
|
||||||
Pipeline *CreatePipeline(MaterialInstance *, const OSString &, const Prim &prim,const bool prim_restart=false);
|
Pipeline *CreatePipeline(MaterialInstance *, const OSString &, const Prim &prim,const bool prim_restart=false);
|
||||||
};//class RenderPass
|
};//class RenderPass
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
|
@ -23,37 +23,47 @@ RenderPass::~RenderPass()
|
|||||||
vkDestroyRenderPass(device,render_pass,nullptr);
|
vkDestroyRenderPass(device,render_pass,nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,PipelineData *data)
|
Pipeline *RenderPass::CreatePipeline(Material *mtl,PipelineData *pd,const VAB *vab)
|
||||||
{
|
{
|
||||||
VkPipeline graphicsPipeline;
|
VkPipeline graphicsPipeline;
|
||||||
|
|
||||||
Material *mtl=mi->GetMaterial();
|
pd->InitShaderStage(mtl->GetStageList());
|
||||||
|
pd->InitVertexInputState(vab);
|
||||||
|
|
||||||
data->InitShaderStage(mtl->GetStageList());
|
pd->SetColorAttachments(color_formats.GetCount());
|
||||||
data->InitVertexInputState(mi->GetVAB());
|
|
||||||
|
|
||||||
data->SetColorAttachments(color_formats.GetCount());
|
pd->pipeline_info.layout = mtl->GetPipelineLayout();
|
||||||
|
|
||||||
data->pipeline_info.layout = mtl->GetPipelineLayout();
|
|
||||||
|
|
||||||
{
|
{
|
||||||
data->pipeline_info.renderPass = render_pass;
|
pd->pipeline_info.renderPass = render_pass;
|
||||||
data->pipeline_info.subpass = 0; //subpass由于还不知道有什么用,所以暂时写0,待知道功用后,需改进
|
pd->pipeline_info.subpass = 0; //subpass由于还不知道有什么用,所以暂时写0,待知道功用后,需改进
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vkCreateGraphicsPipelines( device,
|
if (vkCreateGraphicsPipelines( device,
|
||||||
pipeline_cache,
|
pipeline_cache,
|
||||||
1,&data->pipeline_info,
|
1,&pd->pipeline_info,
|
||||||
nullptr,
|
nullptr,
|
||||||
&graphicsPipeline) != VK_SUCCESS)
|
&graphicsPipeline) != VK_SUCCESS)
|
||||||
|
{
|
||||||
|
delete pd;
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
return(new Pipeline(device,graphicsPipeline,data));
|
return(new Pipeline(device,graphicsPipeline,pd));
|
||||||
|
}
|
||||||
|
|
||||||
|
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const PipelineData *data)
|
||||||
|
{
|
||||||
|
Material *mtl=mi->GetMaterial();
|
||||||
|
|
||||||
|
PipelineData *pd=new PipelineData(data);
|
||||||
|
|
||||||
|
return CreatePipeline(mtl,pd,mi->GetVAB());
|
||||||
}
|
}
|
||||||
|
|
||||||
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip)
|
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip)
|
||||||
{
|
{
|
||||||
PipelineData *pd=GetPipelineData(ip);
|
const PipelineData *pd=GetPipelineData(ip);
|
||||||
|
|
||||||
if(!pd)return(nullptr);
|
if(!pd)return(nullptr);
|
||||||
|
|
||||||
@ -64,11 +74,13 @@ Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &
|
|||||||
{
|
{
|
||||||
if(!mi)return(nullptr);
|
if(!mi)return(nullptr);
|
||||||
|
|
||||||
PipelineData *pd=GetPipelineData(ip);
|
const PipelineData *cpd=GetPipelineData(ip);
|
||||||
|
|
||||||
|
PipelineData *pd=new PipelineData(cpd);
|
||||||
|
|
||||||
pd->Set(prim,prim_restart);
|
pd->Set(prim,prim_restart);
|
||||||
|
|
||||||
Pipeline *p=CreatePipeline(mi,pd);
|
Pipeline *p=CreatePipeline(mi->GetMaterial(),pd,mi->GetVAB());
|
||||||
|
|
||||||
if(p)
|
if(p)
|
||||||
pipeline_list.Add(p);
|
pipeline_list.Add(p);
|
||||||
@ -76,11 +88,13 @@ Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,PipelineData *pd,const Prim &prim,const bool prim_restart)
|
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const PipelineData *cpd,const Prim &prim,const bool prim_restart)
|
||||||
{
|
{
|
||||||
|
PipelineData *pd=new PipelineData(cpd);
|
||||||
|
|
||||||
pd->Set(prim,prim_restart);
|
pd->Set(prim,prim_restart);
|
||||||
|
|
||||||
Pipeline *p=CreatePipeline(mi,pd);
|
Pipeline *p=CreatePipeline(mi->GetMaterial(),pd,mi->GetVAB());
|
||||||
|
|
||||||
if(p)
|
if(p)
|
||||||
pipeline_list.Add(p);
|
pipeline_list.Add(p);
|
||||||
@ -90,7 +104,7 @@ Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,PipelineData *pd,const
|
|||||||
|
|
||||||
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const OSString &pipeline_filename,const Prim &prim,const bool prim_restart)
|
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const OSString &pipeline_filename,const Prim &prim,const bool prim_restart)
|
||||||
{
|
{
|
||||||
PipelineData *pd=GetPipelineData(pipeline_filename);
|
const PipelineData *pd=GetPipelineData(pipeline_filename);
|
||||||
|
|
||||||
if(!pd)return(nullptr);
|
if(!pd)return(nullptr);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user