moved CreateMI to Material from GPUDevice.
This commit is contained in:
@@ -216,8 +216,6 @@ public: //shader & material
|
|||||||
|
|
||||||
Material *CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorManager *,VertexInput *);
|
Material *CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorManager *,VertexInput *);
|
||||||
|
|
||||||
MaterialInstance *CreateMI(Material *,const VILConfig *vil_cfg=nullptr);
|
|
||||||
|
|
||||||
public: //Command Buffer 相关
|
public: //Command Buffer 相关
|
||||||
|
|
||||||
RenderCmdBuffer * CreateRenderCommandBuffer();
|
RenderCmdBuffer * CreateRenderCommandBuffer();
|
||||||
|
@@ -75,6 +75,10 @@ public:
|
|||||||
VIL * CreateVIL(const VILConfig *format_map=nullptr);
|
VIL * CreateVIL(const VILConfig *format_map=nullptr);
|
||||||
bool Release(VIL *);
|
bool Release(VIL *);
|
||||||
const uint GetVILCount();
|
const uint GetVILCount();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
MaterialInstance *CreateMI(const VILConfig *vil_cfg=nullptr);
|
||||||
};//class Material
|
};//class Material
|
||||||
|
|
||||||
using MaterialSets=SortedSets<Material *>;
|
using MaterialSets=SortedSets<Material *>;
|
||||||
|
@@ -50,30 +50,21 @@ protected:
|
|||||||
|
|
||||||
VIL *vil;
|
VIL *vil;
|
||||||
|
|
||||||
uint8 mi_id; //材质实例ID
|
public:
|
||||||
|
|
||||||
|
Material * GetMaterial () {return material;}
|
||||||
|
|
||||||
|
const VIL * GetVIL ()const {return vil;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
friend class GPUDevice;
|
friend class Material;
|
||||||
|
|
||||||
MaterialInstance(Material *,VIL *);
|
MaterialInstance(Material *,VIL *);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual ~MaterialInstance()=default;
|
virtual ~MaterialInstance()=default;
|
||||||
|
|
||||||
Material *GetMaterial(){return material;}
|
|
||||||
|
|
||||||
const uint8_t GetID()const{return mi_id;} ///<获取材质实例ID
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
T *GetData(){return material->GetMIData<T>(mi_id);} ///<获取材质实例数据
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
bool WriteData(const T *data){return material->WriteMIData(mi_id,data);} ///<写入材质实例数据
|
|
||||||
|
|
||||||
const VIL *GetVIL()const{return vil;}
|
|
||||||
MaterialParameters *GetMP(const DescriptorSetType &type){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);
|
||||||
|
@@ -4,15 +4,13 @@
|
|||||||
#include<hgl/graph/VKShaderModule.h>
|
#include<hgl/graph/VKShaderModule.h>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
MaterialInstance *GPUDevice::CreateMI(Material *mtl,const VILConfig *vil_cfg)
|
MaterialInstance *Material::CreateMI(const VILConfig *vil_cfg)
|
||||||
{
|
{
|
||||||
if(!mtl)return(nullptr);
|
VIL *vil=CreateVIL(vil_cfg);
|
||||||
|
|
||||||
VIL *vil=mtl->CreateVIL(vil_cfg);
|
|
||||||
|
|
||||||
if(!vil)return(nullptr);
|
if(!vil)return(nullptr);
|
||||||
|
|
||||||
return(new MaterialInstance(mtl,vil));
|
return(new MaterialInstance(this,vil));
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialInstance::MaterialInstance(Material *mtl,VIL *v)
|
MaterialInstance::MaterialInstance(Material *mtl,VIL *v)
|
||||||
|
@@ -54,7 +54,7 @@ MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl,const VIL
|
|||||||
{
|
{
|
||||||
if(!mtl)return(nullptr);
|
if(!mtl)return(nullptr);
|
||||||
|
|
||||||
MaterialInstance *mi=device->CreateMI(mtl,vil_cfg);
|
MaterialInstance *mi=mtl->CreateMI(vil_cfg);
|
||||||
|
|
||||||
if(mi)
|
if(mi)
|
||||||
Add(mi);
|
Add(mi);
|
||||||
|
Reference in New Issue
Block a user