added WIP at MaterialInstance

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-05-08 22:04:00 +08:00
parent f3ab0a5608
commit 3f1b8be5d0
2 changed files with 38 additions and 18 deletions

View File

@ -4,14 +4,49 @@
#include<hgl/graph/VKMaterial.h> #include<hgl/graph/VKMaterial.h>
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
/*
layout(location=0) in vec4 Position;
layout(location=1) in vec3 Normal;
layout(location=?) in uint MaterialID
#define MI_MAX_COUNT ??? //该值由引擎根据 UBORange/sizeof(MaterialInstance) 计算出来
struct MaterialInstance //这部分数据即为材质实例的具体数据每一个材质实例类负责提供具体数据。由RenderList合并成一整个UBO
{
vec4 BaseColor;
vec4 Emissive;
vec4 ARM;
};
layout(set=?,binding=?) uniform Material
{
MaterialInstance mi[MI_MAX_COUNT]
}mtl;
void main()
{
MaterialInstance mi=mtl.mi[(MaterialID>=MI_MAX_COUNT)?:0:MaterialID]; //如果超出范围则使用0号材质实例数据
vec4 BaseColor =mi.BaseColor;
vec4 Emissive =mi.Emissive;
float AO =mi.ARM.x;
float Roughness =mi.ARM.y;
float Metallic =mi.ARM.z;
*/
/**
*
*/
class MaterialInstance class MaterialInstance
{ {
Material *material; Material *material;
VIL *vil; VIL *vil;
MaterialParameters *mp_per_mi; ///<材质实例独有参数对应PerMaterial合集
private: private:
friend class GPUDevice; friend class GPUDevice;
@ -25,14 +60,7 @@ public:
Material *GetMaterial(){return material;} Material *GetMaterial(){return material;}
const VIL *GetVIL()const{return vil;} const VIL *GetVIL()const{return vil;}
MaterialParameters *GetMP(){return mp_per_mi;} MaterialParameters *GetMP(const DescriptorSetType &type){return material->GetMP(type);}
MaterialParameters *GetMP(const DescriptorSetType &type)
{
if(type==DescriptorSetType::PerMaterial)
return mp_per_mi;
else
return material->GetMP(type);
}
bool BindUBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false); bool BindUBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false);
bool BindSSBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false); bool BindSSBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic=false);

View File

@ -20,14 +20,6 @@ MaterialInstance::MaterialInstance(Material *mtl,VIL *v)
material=mtl; material=mtl;
vil=v; vil=v;
mp_per_mi=mtl->GetMP(DescriptorSetType::PerMaterial);
/*
PerMaterial的属性每个MaterialInstance不一样
MP做绑定记录
*/
} }
bool MaterialInstance::BindUBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic) bool MaterialInstance::BindUBO(const DescriptorSetType &type,const AnsiString &name,DeviceBuffer *ubo,bool dynamic)