upgraded to newly DescriptorSetType
This commit is contained in:
@@ -75,19 +75,19 @@ enum class DescriptorSetsType
|
||||
//设计使其对应shader中的set
|
||||
|
||||
Global=0, ///<全局参数(如太阳光等)
|
||||
Material, ///<材质中永远不变的参数
|
||||
// Texture, ///<材质中的纹理参数
|
||||
Value, ///<材质中的变量参数
|
||||
Primitive, ///<渲染实例参数(如Local2World matrix)
|
||||
PerFrame, ///<帧参数(如摄像机等)
|
||||
PerMaterial,///<材质参数(如纹理等)
|
||||
PerObject, ///<对象参数(如模型矩阵等)
|
||||
|
||||
ENUM_CLASS_RANGE(Global,Primitive)
|
||||
Instance,
|
||||
Skeleton,
|
||||
|
||||
ENUM_CLASS_RANGE(Global,Skeleton)
|
||||
};//
|
||||
|
||||
const DescriptorSetsType CheckDescriptorSetsType(const char *str);
|
||||
|
||||
constexpr char *DescriptSetsTypeName[]=
|
||||
{
|
||||
"Global","Material","Value","Renderable"
|
||||
"Global","PerFrame","PerMaterial","PerObject","Instance","Skeleton"
|
||||
};
|
||||
|
||||
inline const char *GetDescriptorSetsTypeName(const enum class DescriptorSetsType &type)
|
||||
|
@@ -8,6 +8,8 @@
|
||||
VK_NAMESPACE_BEGIN
|
||||
using ShaderStageCreateInfoList=List<VkPipelineShaderStageCreateInfo>;
|
||||
|
||||
using MaterialParameterArray=MaterialParameters *[size_t(DescriptorSetsType::RANGE_SIZE)];
|
||||
|
||||
struct MaterialData
|
||||
{
|
||||
UTF8String name;
|
||||
@@ -21,10 +23,7 @@ struct MaterialData
|
||||
|
||||
PipelineLayoutData *pipeline_layout_data;
|
||||
|
||||
struct
|
||||
{
|
||||
MaterialParameters *m,*g,*r;
|
||||
}mp;
|
||||
MaterialParameterArray mp_array;
|
||||
|
||||
private:
|
||||
|
||||
@@ -66,11 +65,12 @@ public:
|
||||
|
||||
MaterialParameters * GetMP (const DescriptorSetsType &type)
|
||||
{
|
||||
if(type==DescriptorSetsType::Material )return data->mp.m;else
|
||||
if(type==DescriptorSetsType::Primitive )return data->mp.r;else
|
||||
if(type==DescriptorSetsType::Global )return data->mp.g;else
|
||||
return(nullptr);
|
||||
RANGE_CHECK_RETURN_NULLPTR(type)
|
||||
|
||||
return data->mp_array[size_t(type)];
|
||||
}
|
||||
|
||||
const bool hasSet (const DescriptorSetsType &type)const;
|
||||
};//class Material
|
||||
VK_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
|
||||
|
@@ -26,6 +26,7 @@ class MaterialDescriptorSets
|
||||
uint sd_count;
|
||||
|
||||
ShaderDescriptorList descriptor_list[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
|
||||
ShaderDescriptorList descriptor_list_by_set_type[size_t(DescriptorSetsType::RANGE_SIZE)];
|
||||
|
||||
Map<AnsiString,ShaderDescriptor *> sd_by_name;
|
||||
Map<AnsiString,int> binding_map[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
|
||||
@@ -34,7 +35,7 @@ class MaterialDescriptorSets
|
||||
|
||||
private:
|
||||
|
||||
DescriptorSetLayoutCreateInfo sds[size_t(DescriptorSetsType::RANGE_SIZE)];
|
||||
DescriptorSetLayoutCreateInfo dsl_ci[size_t(DescriptorSetsType::RANGE_SIZE)];
|
||||
|
||||
public:
|
||||
|
||||
@@ -50,7 +51,11 @@ public:
|
||||
const int GetSampler (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,name);}
|
||||
const int GetAttachment (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,name);}
|
||||
|
||||
const DescriptorSetLayoutCreateInfo *GetBinding(const DescriptorSetsType &type)const{return sds+size_t(type);}
|
||||
const DescriptorSetLayoutCreateInfo *GetDSLCI(const DescriptorSetsType &type)const{return dsl_ci+size_t(type);}
|
||||
|
||||
const ShaderDescriptorList &GetDescriptorList(const DescriptorSetsType &type)const{return descriptor_list_by_set_type[size_t(type)];}
|
||||
|
||||
const bool hasSet(const DescriptorSetsType &type)const{return !descriptor_list_by_set_type[size_t(type)].IsEmpty();}
|
||||
};//class MaterialDescriptorSets
|
||||
VK_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_VULKAN_MATERIAL_DESCRIPTOR_SETS_INCLUDE
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#ifndef HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
|
||||
#ifndef HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
|
||||
#define HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
|
||||
|
||||
#include<hgl/graph/VK.h>
|
||||
#include<hgl/graph/VKMaterial.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
class MaterialInstance
|
||||
@@ -10,23 +10,23 @@ class MaterialInstance
|
||||
|
||||
VIL *vil;
|
||||
|
||||
MaterialParameters *mp_value;
|
||||
MaterialParameters *mp_per_mi; ///<材质实例独有参数,对应PerMaterial合集
|
||||
|
||||
private:
|
||||
|
||||
friend class GPUDevice;
|
||||
|
||||
MaterialInstance(Material *,VIL *,MaterialParameters *);
|
||||
MaterialInstance(Material *,VIL *);
|
||||
|
||||
public:
|
||||
|
||||
virtual ~MaterialInstance();
|
||||
virtual ~MaterialInstance()=default;
|
||||
|
||||
Material *GetMaterial(){return material;}
|
||||
|
||||
const VIL *GetVIL()const{return vil;}
|
||||
MaterialParameters *GetMP(){return mp_value;}
|
||||
MaterialParameters *GetMP(const DescriptorSetsType &type);
|
||||
MaterialParameters *GetMP(){return mp_per_mi;}
|
||||
MaterialParameters *GetMP(const DescriptorSetsType &type){return material->GetMP(type);}
|
||||
|
||||
bool BindUBO(const DescriptorSetsType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false);
|
||||
bool BindSSBO(const DescriptorSetsType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false);
|
||||
@@ -34,4 +34,4 @@ public:
|
||||
};//class MaterialInstance
|
||||
VK_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
|
||||
|
||||
|
||||
|
@@ -22,7 +22,7 @@ private:
|
||||
public:
|
||||
|
||||
const DescriptorSetsType GetType (){return ds_type;}
|
||||
DescriptorSet * GetDescriptorSet (){return descriptor_sets;}
|
||||
DescriptorSet * GetDescriptorSet (){return descriptor_sets;}
|
||||
const VkDescriptorSet GetVkDescriptorSet ()const{return descriptor_sets->GetDescriptorSet();}
|
||||
|
||||
const uint32_t GetCount ()const{return descriptor_sets->GetCount();}
|
||||
@@ -31,10 +31,11 @@ public:
|
||||
public:
|
||||
|
||||
#define MP_TYPE_IS(name) const bool is##name()const{return ds_type==DescriptorSetsType::name;}
|
||||
MP_TYPE_IS(Material)
|
||||
// MP_TYPE_IS(Texture)
|
||||
MP_TYPE_IS(Value)
|
||||
MP_TYPE_IS(Primitive)
|
||||
MP_TYPE_IS(Skeleton)
|
||||
MP_TYPE_IS(Instance)
|
||||
MP_TYPE_IS(PerObject)
|
||||
MP_TYPE_IS(PerMaterial)
|
||||
MP_TYPE_IS(PerFrame)
|
||||
MP_TYPE_IS(Global)
|
||||
#undef MP_TYPE_IS
|
||||
|
||||
|
@@ -15,7 +15,6 @@ struct ShaderStage
|
||||
|
||||
VertexAttribType type; ///<成份数量(如vec4中的4)
|
||||
|
||||
bool global; ///<是否全局数据
|
||||
bool dynamic; ///<是否动态数据
|
||||
};//struct ShaderStage
|
||||
|
||||
|
Reference in New Issue
Block a user