ULRE/inc/hgl/shadergen/MaterialCreateInfo.h

86 lines
3.8 KiB
C
Raw Normal View History

2023-03-06 14:06:20 +08:00
#pragma once
2023-03-17 10:14:07 +08:00
#include<hgl/shadergen/MaterialDescriptorInfo.h>
2023-03-17 10:08:41 +08:00
#include<hgl/shadergen/ShaderCreateInfoVertex.h>
#include<hgl/shadergen/ShaderCreateInfoGeometry.h>
#include<hgl/shadergen/ShaderCreateInfoFragment.h>
#include<hgl/shadergen/ShaderCreateInfoMap.h>
#include<hgl/graph/RenderTargetOutputConfig.h>
#include<hgl/graph/mtl/MaterialConfig.h>
#include<hgl/graph/mtl/ShaderBuffer.h>
2023-03-06 14:06:20 +08:00
#include<hgl/graph/VKSamplerType.h>
2023-06-02 20:45:19 +08:00
namespace hgl{namespace graph
2023-03-06 14:06:20 +08:00
{
2023-06-02 20:45:19 +08:00
struct GPUDeviceAttribute;
2023-03-13 21:58:27 +08:00
2023-06-02 20:45:19 +08:00
namespace mtl
{
class MaterialCreateInfo
{
protected:
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
const MaterialCreateConfig *config;
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
MaterialDescriptorInfo mdi; ///<材质描述符管理器
2023-06-02 20:45:19 +08:00
AnsiString mi_codes; ///<MaterialInstance代码
uint32_t mi_data_bytes; ///<MaterialInstance数据长度
uint32_t mi_shader_stage; ///<MaterialInstance着色器阶段
2023-06-14 16:49:19 +08:00
uint32_t mi_max_count; ///<MaterialInstance最大数量
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
ShaderCreateInfoMap shader_map; ///<着色器列表
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
ShaderCreateInfoVertex *vert;
ShaderCreateInfoGeometry *geom;
ShaderCreateInfoFragment *frag;
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
public:
2023-03-17 21:06:05 +08:00
2023-06-02 20:45:19 +08:00
const AnsiString &GetName ()const{return config->mtl_name;}
2023-03-17 21:06:05 +08:00
2023-06-12 15:45:34 +08:00
const uint32 GetShaderStage ()const{return config->shader_stage_flag_bit;}
2023-03-06 14:06:20 +08:00
2023-06-12 15:45:34 +08:00
bool hasShader (const VkShaderStageFlagBits ss)const{return config->shader_stage_flag_bit&ss;}
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
bool hasVertex ()const{return hasShader(VK_SHADER_STAGE_VERTEX_BIT);}
// bool hasTessCtrl ()const{return hasShader(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT);}
// bool hasTessEval ()const{return hasShader(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT);}
bool hasGeometry ()const{return hasShader(VK_SHADER_STAGE_GEOMETRY_BIT);}
bool hasFragment ()const{return hasShader(VK_SHADER_STAGE_FRAGMENT_BIT);}
// bool hasCompute ()const{return hasShader(VK_SHADER_STAGE_COMPUTE_BIT);}
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
ShaderCreateInfoVertex * GetVS()const{return vert;}
ShaderCreateInfoGeometry * GetGS()const{return geom;}
ShaderCreateInfoFragment * GetFS()const{return frag;}
2023-06-02 14:22:07 +08:00
2023-06-14 16:49:19 +08:00
const ShaderCreateInfoMap &GetShaderMap()const{return shader_map;}
2023-06-02 20:45:19 +08:00
public:
2023-06-02 14:22:07 +08:00
2023-06-02 20:45:19 +08:00
const MaterialDescriptorInfo &GetMDI()const{return mdi;}
2023-06-14 16:49:19 +08:00
const uint32_t GetMIDataBytes ()const{return mi_data_bytes;}
const uint32_t GetMIMaxCount ()const{return mi_max_count;}
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
public:
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
MaterialCreateInfo(const MaterialCreateConfig *);
~MaterialCreateInfo()=default;
2023-06-12 15:45:34 +08:00
bool SetMaterialInstance(const AnsiString &mi_glsl_codes,const uint32_t mi_struct_bytes,const uint32_t shader_stage_flag_bit);
2023-03-06 14:06:20 +08:00
2023-06-02 20:45:19 +08:00
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes);
bool AddStruct(const ShaderBufferSource &ss){return AddStruct(ss.struct_name,ss.codes);}
2023-03-08 14:02:51 +08:00
2023-06-02 20:45:19 +08:00
bool AddUBO(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const AnsiString &type_name,const AnsiString &name);
bool AddSampler(const VkShaderStageFlagBits flag_bits,const DescriptorSetType set_type,const SamplerType &st,const AnsiString &name);
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss);
bool CreateShader(const GPUDeviceAttribute *);
};//class MaterialCreateInfo
}//namespace mtl
}//namespace graph
}//namespace hgl