MaterialCreateInfo增加AddUBOStruct封装

This commit is contained in:
hyzboy 2025-06-09 23:01:41 +08:00
parent 784e7f0e0b
commit 18d391f01e
5 changed files with 16 additions and 24 deletions

2
CMCore

@ -1 +1 @@
Subproject commit 10108953ebff000823b072be9e4c632471520945 Subproject commit 86ac0c37fcf6c4c4cb82446b89767561c9349517

View File

@ -81,11 +81,11 @@ namespace hgl::graph
bool SetLocalToWorld(const uint32_t shader_stage_flag_bits); bool SetLocalToWorld(const uint32_t shader_stage_flag_bits);
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes); bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes);
bool AddStruct(const ShaderBufferSource &ss){return AddStruct(ss.struct_name,ss.codes);}
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &struct_name,const AnsiString &name); bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &struct_name,const AnsiString &name);
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const AnsiString &struct_name,const AnsiString &name); bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const AnsiString &struct_name,const AnsiString &name);
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss){return AddUBO(flag_bits,set_type,ss.struct_name,ss.name);}
bool AddUBOStruct(const uint32_t flag_bits,const ShaderBufferSource &ss);
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name); bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);

View File

@ -17,9 +17,7 @@ bool Std2DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
if(cfg->local_to_world if(cfg->local_to_world
||cfg->material_instance) ||cfg->material_instance)
{ {
mci->AddStruct(SBS_LocalToWorld); mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_LocalToWorld);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,DescriptorSetType::PerFrame,SBS_LocalToWorld);
vsc->AddAssign(); vsc->AddAssign();
} }
@ -43,11 +41,7 @@ bool Std2DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
if(cfg->coordinate_system==CoordinateSystem2D::Ortho) if(cfg->coordinate_system==CoordinateSystem2D::Ortho)
{ {
mci->AddStruct(SBS_ViewportInfo); mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_ViewportInfo);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
DescriptorSetType::RenderTarget,
SBS_ViewportInfo);
} }
return(true); return(true);

View File

@ -13,20 +13,14 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
if(cfg->camera||cfg->local_to_world||cfg->material_instance) if(cfg->camera||cfg->local_to_world||cfg->material_instance)
{ {
mci->AddStruct(SBS_LocalToWorld); mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_LocalToWorld);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,DescriptorSetType::PerFrame,SBS_LocalToWorld);
vsc->AddAssign(); vsc->AddAssign();
} }
if(cfg->camera) if(cfg->camera)
{ {
mci->AddStruct(SBS_CameraInfo); mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_CameraInfo);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
DescriptorSetType::Camera,
SBS_CameraInfo);
} }
if(cfg->local_to_world) if(cfg->local_to_world)
@ -58,11 +52,7 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
vsc->AddFunction(func::GetNormalVS); vsc->AddFunction(func::GetNormalVS);
} }
mci->AddStruct(SBS_ViewportInfo); mci->AddUBOStruct(VK_SHADER_STAGE_ALL_GRAPHICS,SBS_ViewportInfo);
mci->AddUBO(VK_SHADER_STAGE_ALL_GRAPHICS,
DescriptorSetType::RenderTarget,
SBS_ViewportInfo);
return(true); return(true);
} }

View File

@ -93,6 +93,14 @@ bool MaterialCreateInfo::AddUBO(const uint32_t flag_bits,const DescriptorSetType
return(result==shader_map.GetCount()); return(result==shader_map.GetCount());
} }
bool MaterialCreateInfo::AddUBOStruct(const uint32_t flag_bits,const ShaderBufferSource &ss)
{
if(!AddStruct(ss.struct_name,ss.codes))
return(false);
return AddUBO(flag_bits,ss.set_type,ss.struct_name,ss.name);
}
bool MaterialCreateInfo::AddSampler(const VkShaderStageFlagBits flag_bit,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name) bool MaterialCreateInfo::AddSampler(const VkShaderStageFlagBits flag_bit,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name)
{ {
if(!shader_map.ContainsKey(flag_bit)) if(!shader_map.ContainsKey(flag_bit))