ULRE/inc/hgl/shadergen/MaterialCreateInfo.h

89 lines
3.1 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>
STD_MTL_NAMESPACE_BEGIN
2023-03-17 10:08:41 +08:00
class MaterialCreateInfo
2023-03-06 14:06:20 +08:00
{
2023-03-13 21:58:27 +08:00
protected:
const MaterialConfig *config;
2023-03-06 14:06:20 +08:00
2023-03-22 15:58:59 +08:00
MaterialDescriptorInfo mdi; ///<材质描述符管理器
2023-03-06 14:06:20 +08:00
AnsiString mi_codes; ///<MaterialInstance代码
2023-05-12 20:30:29 +08:00
uint32_t mi_length; ///<MaterialInstance数据长度
ShaderCreateInfoMap shader_map; ///<着色器列表
2023-03-06 14:06:20 +08:00
2023-03-17 10:08:41 +08:00
ShaderCreateInfoVertex *vert;
ShaderCreateInfoGeometry *geom;
ShaderCreateInfoFragment *frag;
2023-03-06 14:06:20 +08:00
public:
const AnsiString &GetName()const{return config->mtl_name;}
2023-03-17 21:06:05 +08:00
const uint32 GetShaderStage()const{return config->shader_stage;}
2023-03-17 21:06:05 +08:00
bool hasShader(const VkShaderStageFlagBits ss)const{return config->shader_stage&ss;}
2023-03-06 14:06:20 +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);}
ShaderCreateInfoVertex * GetVS()const{return vert;}
ShaderCreateInfoGeometry * GetGS()const{return geom;}
ShaderCreateInfoFragment * GetFS()const{return frag;}
2023-03-06 14:06:20 +08:00
public:
MaterialCreateInfo(const MaterialConfig *);
2023-03-17 10:08:41 +08:00
~MaterialCreateInfo()=default;
2023-03-06 14:06:20 +08:00
2023-05-19 22:22:55 +08:00
/**
*
* @param mi_glsl_codes GLSL代码
* @param mi_struct_bytes
* @return
*/
bool SetMaterialInstance(const AnsiString &mi_glsl_codes,const uint32_t mi_struct_bytes)
{
2023-05-19 22:22:55 +08:00
if(mi_struct_bytes>0&&mi_glsl_codes.Length()<4)return(false);
2023-05-19 22:22:55 +08:00
mi_length=mi_struct_bytes;
2023-05-19 22:22:55 +08:00
if(mi_struct_bytes>0)
mi_codes=mi_glsl_codes;
return(true);
}
2023-03-09 23:21:52 +08:00
bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes);
2023-04-25 18:08:26 +08:00
bool AddStruct(const ShaderBufferSource &ss)
2023-03-22 15:58:59 +08:00
{
return AddStruct(ss.struct_name,ss.codes);
}
2023-03-06 14:06:20 +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);
2023-03-08 14:02:51 +08:00
2023-05-12 20:30:29 +08:00
bool AddUBO(const uint32_t flag_bits,const DescriptorSetType &set_type,const ShaderBufferSource &ss);
2023-03-22 15:58:59 +08:00
2023-03-14 22:22:35 +08:00
bool CreateShader();
2023-03-22 15:58:59 +08:00
const MaterialDescriptorInfo &GetMDI()const{return mdi;}
2023-03-17 10:08:41 +08:00
};//class MaterialCreateInfo
STD_MTL_NAMESPACE_END