ULRE/inc/hgl/graph/VKMaterialInstance.h

75 lines
2.1 KiB
C
Raw Normal View History

2023-02-22 21:50:18 +08:00
#ifndef HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
2023-02-22 21:50:18 +08:00
#include<hgl/graph/VKMaterial.h>
VK_NAMESPACE_BEGIN
2023-05-08 22:04:00 +08:00
2023-05-09 22:03:02 +08:00
/**
* <summary>
*
* layout(location=?) in uint MaterialInstanceID
2023-05-09 22:03:02 +08:00
*
* #define MI_MAX_COUNT ??? //该值由引擎根据 UBORange/sizeof(MaterialInstance) 计算出来
*
* struct MaterialInstance //这部分数据即为材质实例的具体数据每一个材质实例类负责提供具体数据。由RenderList合并成一整个UBO
* { //该类数据由DescriptorSetType为PerMaterial的参数构成
* vec4 BaseColor;
* vec4 Emissive;
* vec4 ARM;
* };
*
* layout(set=?,binding=?) uniform Material
* {
* MaterialInstance mi[MI_MAX_COUNT]
* }mtl;
*
* void main()
* {
* MaterialInstance mi=mtl.mi[(MaterialInstanceID>=MI_MAX_COUNT)?:0:MaterialInstanceID]; //如果超出范围则使用0号材质实例数据
2023-05-09 22:03:02 +08:00
*
* vec4 BaseColor =mi.BaseColor;
* vec4 Emissive =mi.Emissive;
*
* float AO =mi.ARM.x;
* float Roughness =mi.ARM.y;
* float Metallic =mi.ARM.z;
*
* </summary>
2023-05-08 22:04:00 +08:00
*/
/**
2023-05-09 22:03:02 +08:00
* <br>
* RenderList合并成一个大UBO
2023-05-08 22:04:00 +08:00
*/
class MaterialInstance
{
2023-05-09 22:03:02 +08:00
protected:
Material *material;
VIL *vil;
public:
Material * GetMaterial () {return material;}
const VIL * GetVIL ()const {return vil;}
2023-05-09 22:03:02 +08:00
private:
friend class Material;
2023-02-22 21:50:18 +08:00
MaterialInstance(Material *,VIL *);
public:
2023-02-22 21:50:18 +08:00
virtual ~MaterialInstance()=default;
2022-03-09 20:33:26 +08:00
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);
2023-02-23 13:25:05 +08:00
bool BindImageSampler(const DescriptorSetType &type,const AnsiString &name,Texture *tex,Sampler *sampler);
};//class MaterialInstance
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE