added WIP at MaterialInstance
This commit is contained in:
parent
f3ab0a5608
commit
3f1b8be5d0
@ -4,14 +4,49 @@
|
||||
#include<hgl/graph/VKMaterial.h>
|
||||
|
||||
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
|
||||
{
|
||||
Material *material;
|
||||
|
||||
VIL *vil;
|
||||
|
||||
MaterialParameters *mp_per_mi; ///<材质实例独有参数,对应PerMaterial合集
|
||||
|
||||
private:
|
||||
|
||||
friend class GPUDevice;
|
||||
@ -25,14 +60,7 @@ public:
|
||||
Material *GetMaterial(){return material;}
|
||||
|
||||
const VIL *GetVIL()const{return vil;}
|
||||
MaterialParameters *GetMP(){return mp_per_mi;}
|
||||
MaterialParameters *GetMP(const DescriptorSetType &type)
|
||||
{
|
||||
if(type==DescriptorSetType::PerMaterial)
|
||||
return mp_per_mi;
|
||||
else
|
||||
return material->GetMP(type);
|
||||
}
|
||||
MaterialParameters *GetMP(const DescriptorSetType &type){return material->GetMP(type);}
|
||||
|
||||
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);
|
||||
|
@ -20,14 +20,6 @@ MaterialInstance::MaterialInstance(Material *mtl,VIL *v)
|
||||
material=mtl;
|
||||
|
||||
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user