材质保存来自MaterialCreateInfo传递而来的PrimitiveType信息,并在创建Pipeline时传递.

减少在使用中的第二次手写传递,避免失误。
This commit is contained in:
hyzboy 2025-06-12 00:00:14 +08:00
parent 5935c3140f
commit 3fd6f98ef7
14 changed files with 46 additions and 34 deletions

View File

@ -66,7 +66,7 @@ private:
mi_plane_grid=db->CreateMaterialInstance(mtl_plane_grid,&vil_config,&white_color);
if(!mi_plane_grid)return(false);
pipeline_plane_grid=CreatePipeline(mi_plane_grid,InlinePipeline::Solid3D,PrimitiveType::Lines);
pipeline_plane_grid=CreatePipeline(mi_plane_grid,InlinePipeline::Solid3D);
if(!pipeline_plane_grid)return(false);
}
@ -83,7 +83,7 @@ private:
mi_billboard=CreateMaterialInstance(mtl::inline_material::Billboard2D,&cfg);
if(!mi_billboard)return(false);
pipeline_billboard=CreatePipeline(mi_billboard,InlinePipeline::Solid3D,PrimitiveType::Billboard);
pipeline_billboard=CreatePipeline(mi_billboard,InlinePipeline::Solid3D);
if(!pipeline_billboard)return(false);
}

View File

@ -56,7 +56,7 @@ private:
return(false);
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d"));
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,PrimitiveType::Triangles); //等同上一行为Framework重载默认使用swapchain的render target
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D); //等同上一行为Framework重载默认使用swapchain的render target
return pipeline;
}

View File

@ -65,7 +65,7 @@ private:
}
}
pipeline=CreatePipeline(material,InlinePipeline::Solid2D,PrimitiveType::Triangles);
pipeline=CreatePipeline(material,InlinePipeline::Solid2D);
return pipeline;
}

View File

@ -99,7 +99,7 @@ private:
bool InitPipeline()
{
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d"));
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,PrimitiveType::Triangles); //等同上一行为Framework重载默认使用swapchain的render target
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D); //等同上一行为Framework重载默认使用swapchain的render target
return pipeline;
}
@ -140,6 +140,8 @@ public:
void Tick(double)override{}
SceneNode
void Render(double delta_time,graph::RenderCmdBuffer *cmd)
{
cmd->SetClearColor(0,clear_color);

View File

@ -64,7 +64,7 @@ private:
return(false);
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d"));
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,PrimitiveType::Triangles); //等同上一行为Framework重载默认使用swapchain的render target
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D); //等同上一行为Framework重载默认使用swapchain的render target
return pipeline;
}

View File

@ -54,7 +54,7 @@ private:
bool InitPipeline()
{
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d"));
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,PrimitiveType::Triangles); //等同上一行为Framework重载默认使用swapchain的render target
pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D); //等同上一行为Framework重载默认使用swapchain的render target
return pipeline;
}
@ -87,6 +87,8 @@ public:
return(true);
}
SceneNode
void Tick(double)override{}
void Render(double delta_time,graph::RenderCmdBuffer *cmd)

View File

@ -52,7 +52,7 @@ private:
ce=COLOR((int)ce+1);
}
pipeline=CreatePipeline(material_instance[0],InlinePipeline::Solid3D,PrimitiveType::Lines);
pipeline=CreatePipeline(material_instance[0],InlinePipeline::Solid3D);
return pipeline;
}

View File

@ -68,7 +68,7 @@ private:
mi_plane_grid=db->CreateMaterialInstance(mtl_plane_grid,&vil_config,&white_color);
if(!mi_plane_grid)return(false);
pipeline_plane_grid=CreatePipeline(mi_plane_grid,InlinePipeline::Solid3D,PrimitiveType::Lines);
pipeline_plane_grid=CreatePipeline(mi_plane_grid,InlinePipeline::Solid3D);
if(!pipeline_plane_grid)return(false);
}
@ -81,7 +81,7 @@ private:
mi_line=db->CreateMaterialInstance(mtl_line,&vil_config,&yellow_color);
if(!mi_line)return(false);
pipeline_line=CreatePipeline(mi_line,InlinePipeline::Solid3D,PrimitiveType::Lines);
pipeline_line=CreatePipeline(mi_line,InlinePipeline::Solid3D);
if(!pipeline_line)
return(false);

View File

@ -24,6 +24,8 @@ class Material
{
AnsiString name;
PrimitiveType prim; ///<图元类型
VertexInput *vertex_input;
ShaderModuleMap *shader_maps;
@ -45,7 +47,7 @@ private:
friend class RenderResource;
Material(const AnsiString &);
Material(const AnsiString &,const PrimitiveType &);
public:
@ -53,6 +55,8 @@ public:
const AnsiString & GetName ()const{return name;}
const PrimitiveType & GetPrimitiveType ()const{return prim;}
const VertexInput * GetVertexInput ()const{return vertex_input;}
const ShaderStageCreateInfoList & GetStageList ()const{return shader_stage_list;}

View File

@ -56,15 +56,15 @@ public:
public:
Pipeline *CreatePipeline(Material *,const VIL *,const PipelineData *, const PrimitiveType &,const bool prim_restart=false);
Pipeline *CreatePipeline(Material *,const VIL *,const InlinePipeline &, const PrimitiveType &,const bool prim_restart=false);
Pipeline *CreatePipeline(Material *,const VIL *,const PipelineData *, const bool prim_restart=false);
Pipeline *CreatePipeline(Material *,const VIL *,const InlinePipeline &, const bool prim_restart=false);
Pipeline *CreatePipeline(Material *mtl, const PipelineData *, const PrimitiveType &,const bool prim_restart=false);
Pipeline *CreatePipeline(Material *mtl, const InlinePipeline &, const PrimitiveType &,const bool prim_restart=false);
Pipeline *CreatePipeline(Material *mtl, const PipelineData *, const bool prim_restart=false);
Pipeline *CreatePipeline(Material *mtl, const InlinePipeline &, const bool prim_restart=false);
Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &, const PrimitiveType &,const bool prim_restart=false);
Pipeline *CreatePipeline(MaterialInstance *, const PipelineData *, const PrimitiveType &,const bool prim_restart=false);
Pipeline *CreatePipeline(MaterialInstance *, const OSString &, const PrimitiveType &,const bool prim_restart=false);
Pipeline *CreatePipeline(MaterialInstance *, const InlinePipeline &, const bool prim_restart=false);
Pipeline *CreatePipeline(MaterialInstance *, const PipelineData *, const bool prim_restart=false);
Pipeline *CreatePipeline(MaterialInstance *, const OSString &, const bool prim_restart=false);
};//class RenderPass
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_RENDER_PASS_INCLUDE

View File

@ -45,6 +45,8 @@ namespace hgl::graph
public:
const PrimitiveType GetPrimitiveType()const{return config->prim;}
const uint32 GetShaderStage ()const{return config->shader_stage_flag_bit;}
bool hasShader (const VkShaderStageFlagBits ss)const{return config->shader_stage_flag_bit&ss;}

View File

@ -9,9 +9,10 @@ VK_NAMESPACE_BEGIN
void ReleaseVertexInput(VertexInput *vi);
Material::Material(const AnsiString &n)
Material::Material(const AnsiString &n,const PrimitiveType &pt)
{
name=n;
prim=pt;
vertex_input=nullptr;
shader_maps=new ShaderModuleMap;
@ -22,6 +23,7 @@ Material::Material(const AnsiString &n)
mi_data_bytes=0;
mi_data_manager=nullptr;
mi_max_count=0;
}
Material::~Material()

View File

@ -56,11 +56,11 @@ Pipeline *RenderPass::CreatePipeline(const AnsiString &name,PipelineData *pd,con
return(new Pipeline(name,device,graphicsPipeline,vil,pd));
}
Pipeline *RenderPass::CreatePipeline(Material *mtl,const VIL *vil,const PipelineData *cpd,const PrimitiveType &prim,const bool prim_restart)
Pipeline *RenderPass::CreatePipeline(Material *mtl,const VIL *vil,const PipelineData *cpd,const bool prim_restart)
{
PipelineData *pd=new PipelineData(cpd);
pd->SetPrim(prim,prim_restart);
pd->SetPrim(mtl->GetPrimitiveType(),prim_restart);
Pipeline *p=CreatePipeline(mtl->GetName(),pd,mtl->GetStageList(),mtl->GetPipelineLayout(),vil);
@ -70,41 +70,41 @@ Pipeline *RenderPass::CreatePipeline(Material *mtl,const VIL *vil,const Pipeline
return(p);
}
Pipeline *RenderPass::CreatePipeline(Material *mtl,const VIL *vil,const InlinePipeline &ip,const PrimitiveType &prim,const bool prim_restart)
Pipeline *RenderPass::CreatePipeline(Material *mtl,const VIL *vil,const InlinePipeline &ip,const bool prim_restart)
{
if(!mtl)return(nullptr);
return CreatePipeline(mtl,vil,GetPipelineData(ip),prim,prim_restart);
return CreatePipeline(mtl,vil,GetPipelineData(ip),prim_restart);
}
Pipeline *RenderPass::CreatePipeline(Material *mtl,const PipelineData *pd, const PrimitiveType &prim,const bool prim_restart)
Pipeline *RenderPass::CreatePipeline(Material *mtl,const PipelineData *pd,const bool prim_restart)
{
return CreatePipeline(mtl,mtl->GetDefaultVIL(),pd,prim,prim_restart);
return CreatePipeline(mtl,mtl->GetDefaultVIL(),pd,prim_restart);
}
Pipeline *RenderPass::CreatePipeline(Material *mtl,const InlinePipeline &ip, const PrimitiveType &prim,const bool prim_restart)
Pipeline *RenderPass::CreatePipeline(Material *mtl,const InlinePipeline &ip,const bool prim_restart)
{
return CreatePipeline(mtl,mtl->GetDefaultVIL(),ip,prim,prim_restart);
return CreatePipeline(mtl,mtl->GetDefaultVIL(),ip,prim_restart);
}
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip,const PrimitiveType &prim,const bool prim_restart)
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip,const bool prim_restart)
{
if(!mi)return(nullptr);
return CreatePipeline(mi->GetMaterial(),mi->GetVIL(),ip,prim,prim_restart);
return CreatePipeline(mi->GetMaterial(),mi->GetVIL(),ip,prim_restart);
}
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const PipelineData *cpd,const PrimitiveType &prim,const bool prim_restart)
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const PipelineData *cpd,const bool prim_restart)
{
return CreatePipeline(mi->GetMaterial(),mi->GetVIL(),cpd,prim,prim_restart);
return CreatePipeline(mi->GetMaterial(),mi->GetVIL(),cpd,prim_restart);
}
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const OSString &pipeline_filename,const PrimitiveType &prim,const bool prim_restart)
Pipeline *RenderPass::CreatePipeline(MaterialInstance *mi,const OSString &pipeline_filename,const bool prim_restart)
{
const PipelineData *pd=GetPipelineData(pipeline_filename);
if(!pd)return(nullptr);
return CreatePipeline(mi,pd,prim,prim_restart);
return CreatePipeline(mi,pd,prim_restart);
}
VK_NAMESPACE_END

View File

@ -98,7 +98,7 @@ Material *RenderResource::CreateMaterial(const AnsiString &mtl_name,const mtl::M
if(!mci->GetFS())
return(nullptr);
AutoDelete<Material> mtl=new Material(mtl_name);
AutoDelete<Material> mtl=new Material(mtl_name,mci->GetPrimitiveType());
{
const ShaderModule *sm;