ULRE/inc/hgl/graph/VKMaterialInstance.h

75 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#include<hgl/graph/VKMaterial.h>
VK_NAMESPACE_BEGIN
/**
* <summary>
*
* layout(location=?) in uint MaterialInstanceID
*
* #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号材质实例数据
*
* vec4 BaseColor =mi.BaseColor;
* vec4 Emissive =mi.Emissive;
*
* float AO =mi.ARM.x;
* float Roughness =mi.ARM.y;
* float Metallic =mi.ARM.z;
*
* </summary>
*/
/**
* 材质实例类<br>
* 材质实例类本质只是提供一个数据区供RenderList合并成一个大UBO。
*/
class MaterialInstance
{
protected:
Material *material;
VIL *vil;
public:
Material * GetMaterial () {return material;}
const VIL * GetVIL ()const {return vil;}
private:
friend class Material;
MaterialInstance(Material *,VIL *);
public:
virtual ~MaterialInstance()=default;
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 BindImageSampler(const DescriptorSetType &type,const AnsiString &name,Texture *tex,Sampler *sampler);
};//class MaterialInstance
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE