finished auto bound GlobalDescriptor
This commit is contained in:
parent
e1c3b95de7
commit
ac42dcdb26
@ -1 +1 @@
|
||||
Subproject commit f207c0b844e4c8474cdd4a94cd276251025f23ed
|
||||
Subproject commit ba9b1936f65e37c4852f2c59e6adb5d694a4a573
|
@ -8,7 +8,7 @@
|
||||
#include<hgl/graph/SceneInfo.h>
|
||||
#include<hgl/graph/VKVertexInputConfig.h>
|
||||
#include<hgl/graph/VKRenderablePrimitiveCreater.h>
|
||||
#include<hgl/graph/mtl/2d/VertexColor2DNDC.h>
|
||||
#include<hgl/graph/mtl/2d/VertexColor2D.h>
|
||||
|
||||
using namespace hgl;
|
||||
using namespace hgl::graph;
|
||||
@ -98,7 +98,7 @@ private:
|
||||
|
||||
bool InitAutoMaterial()
|
||||
{
|
||||
MaterialCreateInfo *mci=mtl::CreateVertexColor2DNDC();
|
||||
MaterialCreateInfo *mci=mtl::CreateVertexColor2D(CoordinateSystem2D::NDC);
|
||||
|
||||
material_instance=db->CreateMaterialInstance(mci,&vil_config);
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include<hgl/math/Math.h>
|
||||
#include<hgl/filesystem/FileSystem.h>
|
||||
#include<hgl/graph/SceneInfo.h>
|
||||
#include<hgl/graph/mtl/2d/VertexColor2D.h>
|
||||
|
||||
using namespace hgl;
|
||||
using namespace hgl::graph;
|
||||
@ -40,8 +41,14 @@ private:
|
||||
private:
|
||||
|
||||
bool InitMaterial()
|
||||
{
|
||||
material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/VertexColor2D"));
|
||||
{
|
||||
MaterialCreateInfo *mci=mtl::CreateVertexColor2D(CoordinateSystem2D::Ortho);
|
||||
|
||||
//material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/VertexColor2D"));
|
||||
|
||||
material_instance=db->CreateMaterialInstance(mci);
|
||||
|
||||
delete mci;
|
||||
|
||||
if(!material_instance)
|
||||
return(false);
|
||||
|
@ -116,7 +116,7 @@ public:
|
||||
|
||||
cili.lunarg.standard_validation = true;
|
||||
cili.khronos.validation = true;
|
||||
//cili.RenderDoc.Capture = true;
|
||||
cili.RenderDoc.Capture = true;
|
||||
|
||||
inst=CreateInstance("VulkanTest",nullptr,&cili);
|
||||
|
||||
@ -142,7 +142,7 @@ public:
|
||||
|
||||
ubo_vp_info=db->CreateUBO(sizeof(ViewportInfo),&vp_info);
|
||||
|
||||
db->SetGlobal(GlobalShaderUBO::ViewportInfo,ubo_vp_info);
|
||||
db->SetGlobal(GlobalDescriptor::ViewportInfo.name,ubo_vp_info);
|
||||
}
|
||||
|
||||
return(true);
|
||||
|
@ -1,4 +1,4 @@
|
||||
#ifndef HGL_GRAPH_VULKAN_MATERIAL_PARAMETERS_INCLUDE
|
||||
#ifndef HGL_GRAPH_VULKAN_MATERIAL_PARAMETERS_INCLUDE
|
||||
#define HGL_GRAPH_VULKAN_MATERIAL_PARAMETERS_INCLUDE
|
||||
|
||||
#include<hgl/graph/VK.h>
|
||||
@ -27,10 +27,10 @@ public:
|
||||
DescriptorSet * GetDescriptorSet (){return descriptor_set;}
|
||||
const VkDescriptorSet GetVkDescriptorSet ()const{return descriptor_set->GetDescriptorSet();}
|
||||
|
||||
const uint32_t GetDescriptorCount ()const{return desc_manager->GetBindCount(set_type);} ///<获取总共需要绑定的描述符数量
|
||||
const uint32_t GetDescriptorCount ()const{return desc_manager->GetBindCount(set_type);} ///<获取总共需要绑定的描述符数量
|
||||
|
||||
const uint32_t GetBoundCount ()const{return descriptor_set->GetCount();} ///<获取已经绑好的数量
|
||||
const bool IsReady ()const{return descriptor_set->IsReady();} ///<是否全部绑好了
|
||||
const uint32_t GetBoundCount ()const{return descriptor_set->GetCount();} ///<获取已经绑好的数量
|
||||
const bool IsReady ()const{return descriptor_set->IsReady();} ///<是否全部绑好了
|
||||
|
||||
public:
|
||||
|
||||
@ -55,4 +55,4 @@ public:
|
||||
void Update();
|
||||
};//class MaterialParameters
|
||||
VK_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_VULKAN_MATERIAL_PARAMETERS_INCLUDE
|
||||
#endif//HGL_GRAPH_VULKAN_MATERIAL_PARAMETERS_INCLUDE
|
||||
|
@ -12,8 +12,50 @@ enum class CoordinateSystem2D
|
||||
Ortho //左上角为0,0;右下角为(width-1),(height-1)
|
||||
};
|
||||
|
||||
namespace GlobalShaderUBO
|
||||
namespace GlobalDescriptor
|
||||
{
|
||||
constexpr const char ViewportInfo[]="ViewportInfo";
|
||||
constexpr const char CameraInfo[]="CameraInfo";
|
||||
struct ShaderStruct
|
||||
{
|
||||
const char *struct_name;
|
||||
const char *name;
|
||||
const char *codes;
|
||||
};
|
||||
|
||||
constexpr const ShaderStruct ViewportInfo=
|
||||
{
|
||||
"ViewportInfo",
|
||||
"viewport",
|
||||
|
||||
R"(
|
||||
mat4 ortho_matrix;
|
||||
|
||||
vec2 canvas_resolution;
|
||||
vec2 viewport_resolution;
|
||||
vec2 inv_viewport_resolution;
|
||||
)"
|
||||
};
|
||||
|
||||
constexpr const ShaderStruct CameraInfo=
|
||||
{
|
||||
"CameraInfo",
|
||||
"camera",
|
||||
|
||||
R"(
|
||||
mat4 projection;
|
||||
mat4 inverse_projection;
|
||||
|
||||
mat4 view;
|
||||
mat4 inverse_view;
|
||||
|
||||
mat4 vp;
|
||||
mat4 inverse_vp;
|
||||
|
||||
mat4 sky;
|
||||
|
||||
vec3 pos; //eye
|
||||
vec3 view_line; //pos-target
|
||||
vec3 world_up;
|
||||
|
||||
float znear,zfar;)"
|
||||
};
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include<hgl/shadergen/ShaderCreateInfoGeometry.h>
|
||||
#include<hgl/shadergen/ShaderCreateInfoFragment.h>
|
||||
#include<hgl/shadergen/ShaderCreateInfoMap.h>
|
||||
#include<hgl/graph/mtl/StdMaterial.h>
|
||||
#include<hgl/graph/VKSamplerType.h>
|
||||
|
||||
namespace hgl{namespace graph{
|
||||
@ -19,7 +20,7 @@ protected:
|
||||
|
||||
uint32_t shader_stage; ///<着色器阶段
|
||||
|
||||
MaterialDescriptorInfo mdm; ///<材质描述符管理器
|
||||
MaterialDescriptorInfo mdi; ///<材质描述符管理器
|
||||
|
||||
ShaderCreateInfoMap shader_map; ///<着色器列表
|
||||
|
||||
@ -52,12 +53,24 @@ public:
|
||||
~MaterialCreateInfo()=default;
|
||||
|
||||
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes);
|
||||
bool AddStruct(const GlobalDescriptor::ShaderStruct &ss)
|
||||
{
|
||||
return AddStruct(ss.struct_name,ss.codes);
|
||||
}
|
||||
|
||||
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name);
|
||||
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
|
||||
|
||||
bool AddUBO(const VkShaderStageFlagBits flag_bits,const GlobalDescriptor::ShaderStruct &ss)
|
||||
{
|
||||
if(!mdi.hasStruct(ss.struct_name))
|
||||
mdi.AddStruct(ss.struct_name,ss.codes);
|
||||
|
||||
return AddUBO(flag_bits,DescriptorSetType::Global,ss.struct_name,ss.name);
|
||||
}
|
||||
|
||||
bool CreateShader();
|
||||
|
||||
const MaterialDescriptorInfo &GetMDI()const{return mdm;}
|
||||
const MaterialDescriptorInfo &GetMDI()const{return mdi;}
|
||||
};//class MaterialCreateInfo
|
||||
}}//namespace hgl::graph
|
||||
|
@ -17,7 +17,7 @@ protected:
|
||||
|
||||
VkShaderStageFlagBits shader_stage; ///<着色器阶段
|
||||
|
||||
MaterialDescriptorInfo *mdm;
|
||||
MaterialDescriptorInfo *mdi;
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -125,7 +125,7 @@ bool RenderCmdBuffer::BindDescriptorSets(Renderable *ri)
|
||||
|
||||
if((DescriptorSetType)i==DescriptorSetType::PerObject)
|
||||
{
|
||||
dynamic_count=mp->GetCount();
|
||||
dynamic_count=mp->GetBoundCount();
|
||||
|
||||
dynamic_offset=hgl_zero_new<uint32_t>(dynamic_count);
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *
|
||||
|
||||
data->name =mtl_name;
|
||||
data->shader_maps =shader_maps;
|
||||
data->desc_manager =desc_manager;
|
||||
data->desc_manager =desc_manager;
|
||||
data->vertex_input =vi;
|
||||
|
||||
CreateShaderStageList(data->shader_stage_list,shader_maps);
|
||||
|
@ -7,22 +7,32 @@
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
MaterialCreateInfo *CreateVertexColor2D(const CoordinateSystem2D &cs)
|
||||
{
|
||||
AnsiString mtl_name="VertexColor2D";
|
||||
AnsiString mtl_name;
|
||||
|
||||
if(cs==CoordinateSystem2D::NDC)mtl_name+="NDC";else
|
||||
if(cs==CoordinateSystem2D::ZeroToOne)mtl_name+="ZeroToOne";else
|
||||
if(cs==CoordinateSystem2D::Ortho)mtl_name+="Ortho";else
|
||||
if(cs==CoordinateSystem2D::NDC )mtl_name="VertexColor2DNDC";else
|
||||
if(cs==CoordinateSystem2D::ZeroToOne)mtl_name="VertexColor2DZeroToOne";else
|
||||
if(cs==CoordinateSystem2D::Ortho )mtl_name="VertexColor2DOrtho";else
|
||||
return(nullptr);
|
||||
|
||||
|
||||
MaterialCreateInfo *mci=new MaterialCreateInfo( mtl_name, ///<名称
|
||||
1, ///<最终一个RT输出
|
||||
false); ///<无深度输出
|
||||
|
||||
AnsiString sfGetPosition;
|
||||
|
||||
if(cs==CoordinateSystem2D::Ortho)
|
||||
{
|
||||
mci->AddStruct(GlobalShaderUBO::ViewportInfo,"");
|
||||
// mci->AddStruct(GlobalDescriptor::ViewportInfo);
|
||||
|
||||
mci->AddUBO(VK_SHADER_STAGE_VERTEX_BIT,GlobalDescriptor::ViewportInfo);
|
||||
|
||||
sfGetPosition="vec4 GetPosition(){return viewport.ortho_matrix*vec4(Position,0,1);}";
|
||||
}
|
||||
else
|
||||
if(cs==CoordinateSystem2D::ZeroToOne)
|
||||
sfGetPosition="vec4 GetPosition(){return vec4(Position*2-1,0,1);}";
|
||||
else
|
||||
sfGetPosition="vec4 GetPosition(){return vec4(Position,0,1);}";
|
||||
|
||||
//vertex部分
|
||||
{
|
||||
@ -33,12 +43,14 @@ MaterialCreateInfo *CreateVertexColor2D(const CoordinateSystem2D &cs)
|
||||
|
||||
vsc->AddOutput(VAT_VEC4,"Color");
|
||||
|
||||
vsc->SetShaderCodes(R"(
|
||||
vsc->SetShaderCodes(
|
||||
sfGetPosition+
|
||||
R"(
|
||||
void main()
|
||||
{
|
||||
Output.Color=Color;
|
||||
|
||||
gl_Position=vec4(Position,0,1);
|
||||
gl_Position=GetPosition();
|
||||
})");
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,8 @@ SET(STD_MTL_2D_HEADER_PATH ${STD_MTL_HEADER_PATH}/2d)
|
||||
SET(STD_MTL_2D_SOURCE_FILES ${STD_MTL_2D_HEADER_PATH}/VertexColor2D.h
|
||||
2d/VertexColor2D.cpp)
|
||||
|
||||
SET(STANDARD_MATERIAL_SOURCE ${STD_MTL_HEADER_PATH}/StdMaterial.h)
|
||||
SET(STANDARD_MATERIAL_SOURCE ${STD_MTL_HEADER_PATH}/StdMaterial.h
|
||||
GlobalShaderUBO.cpp)
|
||||
|
||||
SOURCE_GROUP("Standard Material" FILES ${STANDARD_MATERIAL_SOURCE})
|
||||
SOURCE_GROUP("Standard Material\\2D" FILES ${STD_MTL_2D_SOURCE_FILES})
|
||||
|
@ -14,9 +14,9 @@ MaterialCreateInfo::MaterialCreateInfo(const AnsiString &n,const uint rc,const b
|
||||
|
||||
shader_stage=ss;
|
||||
|
||||
if(hasVertex ())shader_map.Add(vert=new ShaderCreateInfoVertex (&mdm));else vert=nullptr;
|
||||
if(hasGeometry ())shader_map.Add(geom=new ShaderCreateInfoGeometry(&mdm));else geom=nullptr;
|
||||
if(hasFragment ())shader_map.Add(frag=new ShaderCreateInfoFragment(&mdm));else frag=nullptr;
|
||||
if(hasVertex ())shader_map.Add(vert=new ShaderCreateInfoVertex (&mdi));else vert=nullptr;
|
||||
if(hasGeometry ())shader_map.Add(geom=new ShaderCreateInfoGeometry(&mdi));else geom=nullptr;
|
||||
if(hasFragment ())shader_map.Add(frag=new ShaderCreateInfoFragment(&mdi));else frag=nullptr;
|
||||
}
|
||||
|
||||
bool MaterialCreateInfo::AddStruct(const AnsiString &struct_name,const AnsiString &codes)
|
||||
@ -24,7 +24,7 @@ bool MaterialCreateInfo::AddStruct(const AnsiString &struct_name,const AnsiStrin
|
||||
if(struct_name.IsEmpty()||codes.IsEmpty())
|
||||
return(false);
|
||||
|
||||
return mdm.AddStruct(struct_name,codes);
|
||||
return mdi.AddStruct(struct_name,codes);
|
||||
}
|
||||
|
||||
bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name)
|
||||
@ -32,7 +32,7 @@ bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const Descr
|
||||
if(!shader_map.KeyExist(flag_bit))
|
||||
return(false);
|
||||
|
||||
if(!mdm.hasStruct(type_name))
|
||||
if(!mdi.hasStruct(type_name))
|
||||
return(false);
|
||||
|
||||
ShaderCreateInfo *sc=shader_map[flag_bit];
|
||||
@ -40,7 +40,7 @@ bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const Descr
|
||||
if(!sc)
|
||||
return(false);
|
||||
|
||||
UBODescriptor *ubo=mdm.GetUBO(name);
|
||||
UBODescriptor *ubo=mdi.GetUBO(name);
|
||||
|
||||
if(ubo)
|
||||
{
|
||||
@ -56,9 +56,9 @@ bool MaterialCreateInfo::AddUBO(const VkShaderStageFlagBits flag_bit,const Descr
|
||||
ubo=new UBODescriptor();
|
||||
|
||||
ubo->type=type_name;
|
||||
ubo->name=name;
|
||||
hgl::strcpy(ubo->name,DESCRIPTOR_NAME_MAX_LENGTH,name);
|
||||
|
||||
return sc->sdm->AddUBO(set_type,mdm.AddUBO(flag_bit,set_type,ubo));
|
||||
return sc->sdm->AddUBO(set_type,mdi.AddUBO(flag_bit,set_type,ubo));
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ bool MaterialCreateInfo::AddSampler(const VkShaderStageFlagBits flag_bit,const D
|
||||
if(!sc)
|
||||
return(false);
|
||||
|
||||
SamplerDescriptor *sampler=mdm.GetSampler(name);
|
||||
SamplerDescriptor *sampler=mdi.GetSampler(name);
|
||||
|
||||
AnsiString st_name=GetSamplerTypeName(st);
|
||||
|
||||
@ -92,9 +92,9 @@ bool MaterialCreateInfo::AddSampler(const VkShaderStageFlagBits flag_bit,const D
|
||||
sampler=new SamplerDescriptor();
|
||||
|
||||
sampler->type=st_name;
|
||||
sampler->name=name;
|
||||
hgl::strcpy(sampler->name,DESCRIPTOR_NAME_MAX_LENGTH,name);
|
||||
|
||||
return sc->sdm->AddSampler(set_type,mdm.AddSampler(flag_bit,set_type,sampler));
|
||||
return sc->sdm->AddSampler(set_type,mdi.AddSampler(flag_bit,set_type,sampler));
|
||||
}
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ bool MaterialCreateInfo::CreateShader()
|
||||
if(shader_map.IsEmpty())
|
||||
return(false);
|
||||
|
||||
mdm.Resort();
|
||||
mdi.Resort();
|
||||
|
||||
ShaderCreateInfo *sc,*last=nullptr;
|
||||
|
||||
|
@ -6,7 +6,7 @@ namespace hgl{namespace graph{
|
||||
ShaderCreateInfo::ShaderCreateInfo(VkShaderStageFlagBits ss,MaterialDescriptorInfo *m)
|
||||
{
|
||||
shader_stage=ss;
|
||||
mdm=m;
|
||||
mdi=m;
|
||||
sdm=new ShaderDescriptorInfo(ss);
|
||||
|
||||
spv_data=nullptr;
|
||||
@ -81,7 +81,10 @@ bool ShaderCreateInfo::ProcInput(ShaderCreateInfo *last_sc)
|
||||
AnsiString last_output=last_sc->GetOutputStruct();
|
||||
|
||||
if(last_output.IsEmpty())
|
||||
{
|
||||
final_shader+="\n";
|
||||
return(true);
|
||||
}
|
||||
|
||||
final_shader+="layout(location=0) in ";
|
||||
final_shader+=last_output;
|
||||
@ -131,14 +134,14 @@ bool ShaderCreateInfo::ProcStruct()
|
||||
|
||||
for(auto &str:struct_list)
|
||||
{
|
||||
if(!mdm->GetStruct(*str,codes))
|
||||
if(!mdi->GetStruct(*str,codes))
|
||||
return(false);
|
||||
|
||||
final_shader+="struct ";
|
||||
final_shader+=*str;
|
||||
final_shader+="\n{\n";
|
||||
final_shader+="\n{";
|
||||
final_shader+=codes;
|
||||
final_shader+="\n};\n\n";
|
||||
final_shader+="};\n\n";
|
||||
}
|
||||
|
||||
return(true);
|
||||
@ -154,6 +157,8 @@ bool ShaderCreateInfo::ProcUBO()
|
||||
|
||||
auto ubo=ubo_list.GetData();
|
||||
|
||||
AnsiString struct_codes;
|
||||
|
||||
for(int i=0;i<count;i++)
|
||||
{
|
||||
final_shader+="layout(set=";
|
||||
@ -162,9 +167,16 @@ bool ShaderCreateInfo::ProcUBO()
|
||||
final_shader+=AnsiString::numberOf((*ubo)->binding);
|
||||
final_shader+=") uniform ";
|
||||
final_shader+=(*ubo)->type;
|
||||
final_shader+=" ";
|
||||
final_shader+="{\n";
|
||||
|
||||
if(!mdi->GetStruct((*ubo)->type,struct_codes))
|
||||
return(false);
|
||||
|
||||
final_shader+=struct_codes;
|
||||
|
||||
final_shader+="\n}";
|
||||
final_shader+=(*ubo)->name;
|
||||
final_shader+="\n";
|
||||
final_shader+=";\n";
|
||||
|
||||
++ubo;
|
||||
}
|
||||
@ -244,8 +256,8 @@ bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc)
|
||||
return(false);
|
||||
if(!ProcInput(last_sc))
|
||||
return(false);
|
||||
if(!ProcStruct())
|
||||
return(false);
|
||||
// if(!ProcStruct())
|
||||
// return(false);
|
||||
|
||||
if(!ProcUBO())
|
||||
return(false);
|
||||
|
Loading…
x
Reference in New Issue
Block a user