#ifndef HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
#include"VK.h"
VK_NAMESPACE_BEGIN
class Shader;
class DescriptorSetLayoutCreater;
class MaterialInstance;
class VertexInputState;
class VertexInputStateInstance;
/**
* 材质类
* 用于管理shader,提供DescriptorSetLayoutCreater
*/
class Material
{
Shader *shader;
VertexInputState *vis;
DescriptorSetLayoutCreater *dsl_creater;
public:
Material(Shader *s,VertexInputState *state,DescriptorSetLayoutCreater *dslc)
{
shader=s;
vis=state;
dsl_creater=dslc;
}
~Material();
MaterialInstance *CreateInstance();
};//class Material
/**
* 材质实例
* 用于在指定Material的情况下,具体绑定UBO/TEXTURE等,提供pipeline
*/
class MaterialInstance
{
const Material *mat; ///<这里的是对material的完全引用,不做任何修改
VertexInputStateInstance *vis_instance; ///<这里的vis是Material中vis的复制体
public:
MaterialInstance(Material *m,VertexInputStateInstance *vi)
{
mat=m;
vis_instance=vi;
}
~MaterialInstance();
};//class MaterialInstance
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE