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