From 1ca44cd03716de3a44348a5a3891587d45c5b639 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 24 Jun 2020 01:51:10 +0800 Subject: [PATCH] Add ShaderModuleManage::CreateMaterial(vs,gs,fs) functions --- inc/hgl/graph/vulkan/VKShaderModuleManage.h | 29 +++++++++++++++++++ .../Vulkan/VKShaderModuleManage.cpp | 20 +++++++++++++ 2 files changed, 49 insertions(+) diff --git a/inc/hgl/graph/vulkan/VKShaderModuleManage.h b/inc/hgl/graph/vulkan/VKShaderModuleManage.h index 3db7dc15..d1bf4d0c 100644 --- a/inc/hgl/graph/vulkan/VKShaderModuleManage.h +++ b/inc/hgl/graph/vulkan/VKShaderModuleManage.h @@ -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 diff --git a/src/RenderDevice/Vulkan/VKShaderModuleManage.cpp b/src/RenderDevice/Vulkan/VKShaderModuleManage.cpp index 85ff70b2..b6e07b1d 100644 --- a/src/RenderDevice/Vulkan/VKShaderModuleManage.cpp +++ b/src/RenderDevice/Vulkan/VKShaderModuleManage.cpp @@ -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