split codes of ShaderGen
This commit is contained in:
50
inc/hgl/shadergen/MaterialCreater.h
Normal file
50
inc/hgl/shadergen/MaterialCreater.h
Normal file
@@ -0,0 +1,50 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/shadergen/MaterialDescriptorManager.h>
|
||||
#include<hgl/shadergen/ShaderCreaterVertex.h>
|
||||
#include<hgl/shadergen/ShaderCreaterGeometry.h>
|
||||
#include<hgl/shadergen/ShaderCreaterFragment.h>
|
||||
#include<hgl/shadergen/ShaderCreaterMap.h>
|
||||
#include<hgl/graph/VKSamplerType.h>
|
||||
|
||||
SHADERGEN_NAMESPACE_BEGIN
|
||||
class MaterialCreater
|
||||
{
|
||||
uint rt_count; ///<输出的RT数量
|
||||
|
||||
uint32_t shader_stage; ///<着色器阶段
|
||||
|
||||
MaterialDescriptorManager MDM; ///<材质描述符管理器
|
||||
|
||||
ShaderCreaterMap shader_map; ///<着色器列表
|
||||
|
||||
ShaderCreaterVertex *vert;
|
||||
ShaderCreaterGeometry *geom;
|
||||
ShaderCreaterFragment *frag;
|
||||
|
||||
public:
|
||||
|
||||
bool hasShader(const VkShaderStageFlagBits ss)const{return shader_stage&ss;}
|
||||
|
||||
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);}
|
||||
|
||||
ShaderCreaterVertex * GetVS(){return vert;}
|
||||
ShaderCreaterGeometry * GetGS(){return geom;}
|
||||
ShaderCreaterFragment * GetFS(){return frag;}
|
||||
|
||||
public:
|
||||
|
||||
MaterialCreater(const uint rc,const uint32 ss=VK_SHADER_STAGE_VERTEX_BIT|VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
~MaterialCreater()=default;
|
||||
|
||||
bool AddUBOStruct(const AnsiString &ubo_typename,const AnsiString &codes);
|
||||
|
||||
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);
|
||||
};//class MaterialCreater
|
||||
SHADERGEN_NAMESPACE_END
|
@@ -2,7 +2,7 @@
|
||||
|
||||
#include<hgl/graph/VKShaderDescriptor.h>
|
||||
#include<hgl/graph/VKDescriptorSetType.h>
|
||||
#include<hgl/shadergen/ShaderCommon.h>
|
||||
#include<hgl/shadergen/ShaderGenNamespace.h>
|
||||
#include<hgl/type/Map.h>
|
||||
|
||||
using namespace hgl;
|
||||
|
39
inc/hgl/shadergen/ShaderCreater.h
Normal file
39
inc/hgl/shadergen/ShaderCreater.h
Normal file
@@ -0,0 +1,39 @@
|
||||
#ifndef HGL_SHADER_CREATER_INCLUDE
|
||||
#define HGL_SHADER_CREATER_INCLUDE
|
||||
|
||||
#include<hgl/shadergen/ShaderDescriptorManager.h>
|
||||
|
||||
SHADERGEN_NAMESPACE_BEGIN
|
||||
class ShaderCreater
|
||||
{
|
||||
VkShaderStageFlagBits shader_stage; ///<着色器阶段
|
||||
|
||||
protected:
|
||||
|
||||
AnsiString main_codes;
|
||||
|
||||
public:
|
||||
|
||||
ShaderDescriptorManager sdm;
|
||||
|
||||
VkShaderStageFlagBits GetShaderStage()const{return shader_stage;}
|
||||
|
||||
public:
|
||||
|
||||
ShaderCreater(VkShaderStageFlagBits ss):sdm(ss)
|
||||
{
|
||||
shader_stage=ss;
|
||||
}
|
||||
|
||||
virtual ~ShaderCreater()=default;
|
||||
|
||||
int AddInput(const VAT &type,const AnsiString &name);
|
||||
int AddInput(const AnsiString &type,const AnsiString &name);
|
||||
|
||||
int AddOutput(const VAT &type,const AnsiString &name);
|
||||
int AddOutput(const AnsiString &type,const AnsiString &name);
|
||||
|
||||
bool AddFunction(const AnsiString &return_type,const AnsiString &func_name,const AnsiString ¶m_list,const AnsiString &codes);
|
||||
};//class ShaderCreater
|
||||
SHADERGEN_NAMESPACE_END
|
||||
#endif//HGL_SHADER_CREATER_INCLUDE
|
15
inc/hgl/shadergen/ShaderCreaterFragment.h
Normal file
15
inc/hgl/shadergen/ShaderCreaterFragment.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/shadergen/ShaderCreater.h>
|
||||
|
||||
SHADERGEN_NAMESPACE_BEGIN
|
||||
class ShaderCreaterFragment:public ShaderCreater
|
||||
{
|
||||
public:
|
||||
|
||||
ShaderCreaterFragment():ShaderCreater(VK_SHADER_STAGE_FRAGMENT_BIT){}
|
||||
~ShaderCreaterFragment()=default;
|
||||
|
||||
void UseDefaultMain();
|
||||
};
|
||||
SHADERGEN_NAMESPACE_END
|
13
inc/hgl/shadergen/ShaderCreaterGeometry.h
Normal file
13
inc/hgl/shadergen/ShaderCreaterGeometry.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/shadergen/ShaderCreater.h>
|
||||
|
||||
SHADERGEN_NAMESPACE_BEGIN
|
||||
class ShaderCreaterGeometry:public ShaderCreater
|
||||
{
|
||||
public:
|
||||
|
||||
ShaderCreaterGeometry():ShaderCreater(VK_SHADER_STAGE_GEOMETRY_BIT){}
|
||||
~ShaderCreaterGeometry()=default;
|
||||
};
|
||||
SHADERGEN_NAMESPACE_END
|
25
inc/hgl/shadergen/ShaderCreaterMap.h
Normal file
25
inc/hgl/shadergen/ShaderCreaterMap.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/shadergen/ShaderCreater.h>
|
||||
|
||||
SHADERGEN_NAMESPACE_BEGIN
|
||||
class ShaderCreaterMap:public ObjectMap<VkShaderStageFlagBits,ShaderCreater>
|
||||
{
|
||||
public:
|
||||
|
||||
using ObjectMap<VkShaderStageFlagBits,ShaderCreater>::ObjectMap;
|
||||
|
||||
bool Add(ShaderCreater *sc)
|
||||
{
|
||||
if(!sc)return(false);
|
||||
|
||||
VkShaderStageFlagBits flag=sc->GetShaderStage();
|
||||
|
||||
if(KeyExist(flag))
|
||||
return(false);
|
||||
|
||||
ObjectMap<VkShaderStageFlagBits,ShaderCreater>::Add(flag,sc);
|
||||
return(true);
|
||||
}
|
||||
};
|
||||
SHADERGEN_NAMESPACE_END
|
15
inc/hgl/shadergen/ShaderCreaterVertex.h
Normal file
15
inc/hgl/shadergen/ShaderCreaterVertex.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/shadergen/ShaderCreater.h>
|
||||
|
||||
SHADERGEN_NAMESPACE_BEGIN
|
||||
class ShaderCreaterVertex:public ShaderCreater
|
||||
{
|
||||
public:
|
||||
|
||||
ShaderCreaterVertex():ShaderCreater(VK_SHADER_STAGE_VERTEX_BIT){}
|
||||
~ShaderCreaterVertex()=default;
|
||||
|
||||
void UseDefaultMain();
|
||||
};
|
||||
SHADERGEN_NAMESPACE_END
|
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/shadergen/ShaderCommon.h>
|
||||
#include<hgl/shadergen/ShaderGenNamespace.h>
|
||||
#include<hgl/type/Map.h>
|
||||
#include<hgl/graph/VKShaderStage.h>
|
||||
#include<hgl/graph/VKDescriptorSetType.h>
|
||||
|
Reference in New Issue
Block a user