ULRE/inc/hgl/graph/vulkan/VKShaderModuleManage.h

74 lines
2.8 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_VULKAN_SHADER_MODULE_MANAGE_INCLUDE
#define HGL_GRAPH_VULKAN_SHADER_MODULE_MANAGE_INCLUDE
#include<hgl/graph/vulkan/VK.h>
#include<hgl/type/Map.h>
2020-09-05 17:54:21 +08:00
#include<hgl/type/String.h>
VK_NAMESPACE_BEGIN
2020-06-09 19:40:08 +08:00
class ShaderResource;
/**
* Shader模块管理器<br>
* shader模块均由它创建和释放
* shader(vs/fs/gs等单个)
*/
class ShaderModuleManage
{
Device *device;
int shader_count;
Map<int,ShaderModule *> shader_list;
2020-09-17 21:49:23 +08:00
protected:
void Free(ShaderModuleMap *);
Material *CreateMaterial(ShaderModuleMap *);
public:
ShaderModuleManage(Device *dev)
{
device=dev;
shader_count=0;
}
~ShaderModuleManage();
2020-06-09 19:40:08 +08:00
const ShaderModule *CreateShader(ShaderResource *);
const ShaderModule *CreateShader(const VkShaderStageFlagBits shader_stage_bit,const OSString &filename);
2020-06-09 19:40:08 +08:00
/*
#define ADD_SHADER_FUNC(sn,vk_name) const ShaderModule *Create##sn##Shader(const void *spv_data,const uint32_t spv_size){return CreateShader(VK_SHADER_STAGE_##vk_name##_BIT,spv_data,spv_size);}
ADD_SHADER_FUNC(Vertex, VERTEX)
ADD_SHADER_FUNC(Fragment, FRAGMENT)
ADD_SHADER_FUNC(Geometry, GEOMETRY)
ADD_SHADER_FUNC(TessCtrl, TESSELLATION_CONTROL)
ADD_SHADER_FUNC(TessEval, TESSELLATION_EVALUATION)
ADD_SHADER_FUNC(Compute, COMPUTE)
#undef ADD_SHADER_FUNC
#define ADD_NV_SHADER_FUNC(sn,vk_name) const ShaderModule *Create##sn##Shader(const void *spv_data,const uint32_t spv_size){return CreateShader(VK_SHADER_STAGE_##vk_name##_BIT_NV,spv_data,spv_size);}
ADD_NV_SHADER_FUNC(Raygen, RAYGEN);
ADD_NV_SHADER_FUNC(AnyHit, ANY_HIT);
ADD_NV_SHADER_FUNC(ClosestHit, CLOSEST_HIT);
ADD_NV_SHADER_FUNC(MissBit, MISS);
ADD_NV_SHADER_FUNC(Intersection,INTERSECTION);
ADD_NV_SHADER_FUNC(Callable, CALLABLE);
ADD_NV_SHADER_FUNC(Task, TASK);
ADD_NV_SHADER_FUNC(Mesh, MESH);
#undef ADD_NV_SHADER_FUNC
2020-06-09 19:40:08 +08:00
*/
const ShaderModule *GetShader (int);
bool ReleaseShader (const ShaderModule *);
2020-09-17 21:49:23 +08:00
Material *CreateMaterial(const VertexShaderModule *vertex_shader_module,const ShaderModule *fragment_shader_module);
Material *CreateMaterial(const VertexShaderModule *vertex_shader_module,const ShaderModule *geometry_shader_module,const ShaderModule *fragment_shader_module);
2020-09-17 21:49:23 +08:00
Material *CreateMaterial(const OSString &vertex_shader_filename,const OSString &fragment_shader_filename);
Material *CreateMaterial(const OSString &vertex_shader_filename,const OSString &geometry_shader_filename,const OSString &fragment_shader_filename);
2020-09-17 21:49:23 +08:00
Material *CreateMaterial(const OSString &filename);
};//class ShaderModuleManage
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_SHADER_MODULE_MANAGE_INCLUDE