材质保存来自MaterialCreateInfo传递而来的PrimitiveType信息,并在创建Pipeline时传递.
减少在使用中的第二次手写传递,避免失误。
This commit is contained in:
parent
5935c3140f
commit
3fd6f98ef7
@ -66,7 +66,7 @@ private:
|
|||||||
mi_plane_grid=db->CreateMaterialInstance(mtl_plane_grid,&vil_config,&white_color);
|
mi_plane_grid=db->CreateMaterialInstance(mtl_plane_grid,&vil_config,&white_color);
|
||||||
if(!mi_plane_grid)return(false);
|
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);
|
if(!pipeline_plane_grid)return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ private:
|
|||||||
mi_billboard=CreateMaterialInstance(mtl::inline_material::Billboard2D,&cfg);
|
mi_billboard=CreateMaterialInstance(mtl::inline_material::Billboard2D,&cfg);
|
||||||
if(!mi_billboard)return(false);
|
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);
|
if(!pipeline_billboard)return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ private:
|
|||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d"));
|
// 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;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pipeline=CreatePipeline(material,InlinePipeline::Solid2D,PrimitiveType::Triangles);
|
pipeline=CreatePipeline(material,InlinePipeline::Solid2D);
|
||||||
|
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ private:
|
|||||||
bool InitPipeline()
|
bool InitPipeline()
|
||||||
{
|
{
|
||||||
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d"));
|
// 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;
|
return pipeline;
|
||||||
}
|
}
|
||||||
@ -140,6 +140,8 @@ public:
|
|||||||
|
|
||||||
void Tick(double)override{}
|
void Tick(double)override{}
|
||||||
|
|
||||||
|
由于新架构全部要走SceneNode,所以此范例已不可用
|
||||||
|
|
||||||
void Render(double delta_time,graph::RenderCmdBuffer *cmd)
|
void Render(double delta_time,graph::RenderCmdBuffer *cmd)
|
||||||
{
|
{
|
||||||
cmd->SetClearColor(0,clear_color);
|
cmd->SetClearColor(0,clear_color);
|
||||||
|
@ -64,7 +64,7 @@ private:
|
|||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d"));
|
// 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;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ private:
|
|||||||
bool InitPipeline()
|
bool InitPipeline()
|
||||||
{
|
{
|
||||||
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d"));
|
// 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;
|
return pipeline;
|
||||||
}
|
}
|
||||||
@ -87,6 +87,8 @@ public:
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
由于新架构全部要走SceneNode,所以此范例已不可用
|
||||||
|
|
||||||
void Tick(double)override{}
|
void Tick(double)override{}
|
||||||
|
|
||||||
void Render(double delta_time,graph::RenderCmdBuffer *cmd)
|
void Render(double delta_time,graph::RenderCmdBuffer *cmd)
|
||||||
|
@ -52,7 +52,7 @@ private:
|
|||||||
ce=COLOR((int)ce+1);
|
ce=COLOR((int)ce+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
pipeline=CreatePipeline(material_instance[0],InlinePipeline::Solid3D,PrimitiveType::Lines);
|
pipeline=CreatePipeline(material_instance[0],InlinePipeline::Solid3D);
|
||||||
|
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ private:
|
|||||||
mi_plane_grid=db->CreateMaterialInstance(mtl_plane_grid,&vil_config,&white_color);
|
mi_plane_grid=db->CreateMaterialInstance(mtl_plane_grid,&vil_config,&white_color);
|
||||||
if(!mi_plane_grid)return(false);
|
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);
|
if(!pipeline_plane_grid)return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ private:
|
|||||||
mi_line=db->CreateMaterialInstance(mtl_line,&vil_config,&yellow_color);
|
mi_line=db->CreateMaterialInstance(mtl_line,&vil_config,&yellow_color);
|
||||||
if(!mi_line)return(false);
|
if(!mi_line)return(false);
|
||||||
|
|
||||||
pipeline_line=CreatePipeline(mi_line,InlinePipeline::Solid3D,PrimitiveType::Lines);
|
pipeline_line=CreatePipeline(mi_line,InlinePipeline::Solid3D);
|
||||||
|
|
||||||
if(!pipeline_line)
|
if(!pipeline_line)
|
||||||
return(false);
|
return(false);
|
||||||
|
@ -24,6 +24,8 @@ class Material
|
|||||||
{
|
{
|
||||||
AnsiString name;
|
AnsiString name;
|
||||||
|
|
||||||
|
PrimitiveType prim; ///<图元类型
|
||||||
|
|
||||||
VertexInput *vertex_input;
|
VertexInput *vertex_input;
|
||||||
|
|
||||||
ShaderModuleMap *shader_maps;
|
ShaderModuleMap *shader_maps;
|
||||||
@ -45,7 +47,7 @@ private:
|
|||||||
|
|
||||||
friend class RenderResource;
|
friend class RenderResource;
|
||||||
|
|
||||||
Material(const AnsiString &);
|
Material(const AnsiString &,const PrimitiveType &);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -53,6 +55,8 @@ public:
|
|||||||
|
|
||||||
const AnsiString & GetName ()const{return name;}
|
const AnsiString & GetName ()const{return name;}
|
||||||
|
|
||||||
|
const PrimitiveType & GetPrimitiveType ()const{return prim;}
|
||||||
|
|
||||||
const VertexInput * GetVertexInput ()const{return vertex_input;}
|
const VertexInput * GetVertexInput ()const{return vertex_input;}
|
||||||
|
|
||||||
const ShaderStageCreateInfoList & GetStageList ()const{return shader_stage_list;}
|
const ShaderStageCreateInfoList & GetStageList ()const{return shader_stage_list;}
|
||||||
|
@ -56,15 +56,15 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Pipeline *CreatePipeline(Material *,const VIL *,const PipelineData *, 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 PrimitiveType &,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 PipelineData *, const bool prim_restart=false);
|
||||||
Pipeline *CreatePipeline(Material *mtl, const InlinePipeline &, const PrimitiveType &,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 InlinePipeline &, const bool prim_restart=false);
|
||||||
Pipeline *CreatePipeline(MaterialInstance *, const PipelineData *, const PrimitiveType &,const bool prim_restart=false);
|
Pipeline *CreatePipeline(MaterialInstance *, const PipelineData *, const bool prim_restart=false);
|
||||||
Pipeline *CreatePipeline(MaterialInstance *, const OSString &, const PrimitiveType &,const bool prim_restart=false);
|
Pipeline *CreatePipeline(MaterialInstance *, const OSString &, const bool prim_restart=false);
|
||||||
};//class RenderPass
|
};//class RenderPass
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
#endif//HGL_GRAPH_VULKAN_RENDER_PASS_INCLUDE
|
#endif//HGL_GRAPH_VULKAN_RENDER_PASS_INCLUDE
|
||||||
|
@ -45,6 +45,8 @@ namespace hgl::graph
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
const PrimitiveType GetPrimitiveType()const{return config->prim;}
|
||||||
|
|
||||||
const uint32 GetShaderStage ()const{return config->shader_stage_flag_bit;}
|
const uint32 GetShaderStage ()const{return config->shader_stage_flag_bit;}
|
||||||
|
|
||||||
bool hasShader (const VkShaderStageFlagBits ss)const{return config->shader_stage_flag_bit&ss;}
|
bool hasShader (const VkShaderStageFlagBits ss)const{return config->shader_stage_flag_bit&ss;}
|
||||||
|
@ -9,9 +9,10 @@ VK_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
void ReleaseVertexInput(VertexInput *vi);
|
void ReleaseVertexInput(VertexInput *vi);
|
||||||
|
|
||||||
Material::Material(const AnsiString &n)
|
Material::Material(const AnsiString &n,const PrimitiveType &pt)
|
||||||
{
|
{
|
||||||
name=n;
|
name=n;
|
||||||
|
prim=pt;
|
||||||
|
|
||||||
vertex_input=nullptr;
|
vertex_input=nullptr;
|
||||||
shader_maps=new ShaderModuleMap;
|
shader_maps=new ShaderModuleMap;
|
||||||
@ -22,6 +23,7 @@ Material::Material(const AnsiString &n)
|
|||||||
|
|
||||||
mi_data_bytes=0;
|
mi_data_bytes=0;
|
||||||
mi_data_manager=nullptr;
|
mi_data_manager=nullptr;
|
||||||
|
mi_max_count=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Material::~Material()
|
Material::~Material()
|
||||||
|
@ -56,11 +56,11 @@ Pipeline *RenderPass::CreatePipeline(const AnsiString &name,PipelineData *pd,con
|
|||||||
return(new Pipeline(name,device,graphicsPipeline,vil,pd));
|
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);
|
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);
|
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);
|
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);
|
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);
|
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);
|
const PipelineData *pd=GetPipelineData(pipeline_filename);
|
||||||
|
|
||||||
if(!pd)return(nullptr);
|
if(!pd)return(nullptr);
|
||||||
|
|
||||||
return CreatePipeline(mi,pd,prim,prim_restart);
|
return CreatePipeline(mi,pd,prim_restart);
|
||||||
}
|
}
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
|
@ -98,7 +98,7 @@ Material *RenderResource::CreateMaterial(const AnsiString &mtl_name,const mtl::M
|
|||||||
if(!mci->GetFS())
|
if(!mci->GetFS())
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
AutoDelete<Material> mtl=new Material(mtl_name);
|
AutoDelete<Material> mtl=new Material(mtl_name,mci->GetPrimitiveType());
|
||||||
|
|
||||||
{
|
{
|
||||||
const ShaderModule *sm;
|
const ShaderModule *sm;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user