Add ShaderModuleManage::CreateMaterial(vs,gs,fs) functions

This commit is contained in:
hyzboy 2020-06-24 01:51:10 +08:00
parent 9d9dd30416
commit 1ca44cd037
2 changed files with 49 additions and 0 deletions

View File

@ -57,6 +57,8 @@ public:
bool ReleaseShader (const ShaderModule *);
Material * CreateMaterial(const VertexShaderModule *vertex_shader_module,const ShaderModule *fragment_shader_module)const;
Material * CreateMaterial(const VertexShaderModule *vertex_shader_module,const ShaderModule *geometry_shader_module,const ShaderModule *fragment_shader_module)const;
Material * CreateMaterial(const OSString &vertex_shader_filename,const OSString &fragment_shader_filename)
{
const ShaderModule *vs=CreateShader(VK_SHADER_STAGE_VERTEX_BIT,vertex_shader_filename);
@ -74,6 +76,33 @@ public:
return(CreateMaterial((VertexShaderModule *)vs,fs));
}
Material * CreateMaterial(const OSString &vertex_shader_filename,const OSString &geometry_shader_filename,const OSString &fragment_shader_filename)
{
const ShaderModule *vs=CreateShader(VK_SHADER_STAGE_VERTEX_BIT,vertex_shader_filename);
if(!vs)
return(nullptr);
const ShaderModule *gs=CreateShader(VK_SHADER_STAGE_GEOMETRY_BIT,geometry_shader_filename);
if(!gs)
{
ReleaseShader(vs);
return(nullptr);
}
const ShaderModule *fs=CreateShader(VK_SHADER_STAGE_FRAGMENT_BIT,fragment_shader_filename);
if(!fs)
{
ReleaseShader(gs);
ReleaseShader(vs);
return(nullptr);
}
return(CreateMaterial((VertexShaderModule *)vs,gs,fs));
}
};//class ShaderModuleManage
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_SHADER_MODULE_MANAGE_INCLUDE

View File

@ -114,4 +114,24 @@ Material *ShaderModuleManage::CreateMaterial(const VertexShaderModule *vertex_sh
return(VK_NAMESPACE::CreateMaterial(device,smm));
}
Material *ShaderModuleManage::CreateMaterial(const VertexShaderModule *vertex_shader_module,const ShaderModule *geometry_shader_module,const ShaderModule *fragment_shader_module)const
{
if(!vertex_shader_module
||!geometry_shader_module
||!fragment_shader_module)
return(nullptr);
if(vertex_shader_module->GetStage()!=VK_SHADER_STAGE_VERTEX_BIT)return(nullptr);
if(geometry_shader_module->GetStage()!=VK_SHADER_STAGE_GEOMETRY_BIT)return(nullptr);
if(fragment_shader_module->GetStage()!=VK_SHADER_STAGE_FRAGMENT_BIT)return(nullptr);
ShaderModuleMap *smm=new ShaderModuleMap;
smm->Add(VK_SHADER_STAGE_VERTEX_BIT,vertex_shader_module);
smm->Add(VK_SHADER_STAGE_GEOMETRY_BIT,geometry_shader_module);
smm->Add(VK_SHADER_STAGE_FRAGMENT_BIT,fragment_shader_module);
return(VK_NAMESPACE::CreateMaterial(device,smm));
}
VK_NAMESPACE_END