2021-06-16 11:43:19 +08:00
|
|
|
#include<hgl/graph/VKDevice.h>
|
|
|
|
#include<hgl/graph/VKMaterial.h>
|
2021-09-13 20:39:25 +08:00
|
|
|
#include<hgl/graph/VKMaterialDescriptorSets.h>
|
2021-06-16 11:43:19 +08:00
|
|
|
#include"VKDescriptorSetLayoutCreater.h"
|
|
|
|
|
|
|
|
VK_NAMESPACE_BEGIN
|
2021-09-09 18:20:17 +08:00
|
|
|
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorSets *mds)
|
2021-06-16 11:43:19 +08:00
|
|
|
{
|
|
|
|
const int shader_count=shader_maps->GetCount();
|
|
|
|
|
|
|
|
if(shader_count<2)
|
|
|
|
return(nullptr);
|
|
|
|
|
|
|
|
const ShaderModule *sm;
|
|
|
|
|
|
|
|
if(!shader_maps->Get(VK_SHADER_STAGE_VERTEX_BIT,sm))
|
|
|
|
return(nullptr);
|
|
|
|
|
2021-09-13 20:39:25 +08:00
|
|
|
DescriptorSetLayoutCreater *dsl_creater=CreateDescriptorSetLayoutCreater(mds);
|
|
|
|
|
2021-06-16 11:43:19 +08:00
|
|
|
if(!dsl_creater->CreatePipelineLayout())
|
|
|
|
{
|
|
|
|
delete shader_maps;
|
2021-09-13 20:39:25 +08:00
|
|
|
SAFE_CLEAR(mds);
|
2021-06-16 11:43:19 +08:00
|
|
|
return(nullptr);
|
|
|
|
}
|
|
|
|
|
2021-09-13 20:39:25 +08:00
|
|
|
return(new Material(mtl_name,shader_maps,mds,dsl_creater));
|
2021-06-16 11:43:19 +08:00
|
|
|
}
|
|
|
|
|
2021-09-09 18:20:17 +08:00
|
|
|
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *fragment_shader_module,MaterialDescriptorSets *mds)
|
2021-06-16 11:43:19 +08:00
|
|
|
{
|
|
|
|
if(!vertex_shader_module||!fragment_shader_module)
|
|
|
|
return(nullptr);
|
|
|
|
|
|
|
|
if(!vertex_shader_module->IsVertex())return(nullptr);
|
|
|
|
if(!fragment_shader_module->IsFragment())return(nullptr);
|
|
|
|
|
|
|
|
ShaderModuleMap *smm=new ShaderModuleMap;
|
|
|
|
|
|
|
|
smm->Add(vertex_shader_module);
|
|
|
|
smm->Add(fragment_shader_module);
|
|
|
|
|
2021-09-09 18:20:17 +08:00
|
|
|
return CreateMaterial(mtl_name,smm,mds);
|
2021-06-16 11:43:19 +08:00
|
|
|
}
|
|
|
|
|
2021-09-09 18:20:17 +08:00
|
|
|
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *geometry_shader_module,const ShaderModule *fragment_shader_module,MaterialDescriptorSets *mds)
|
2021-06-16 11:43:19 +08:00
|
|
|
{
|
|
|
|
if(!vertex_shader_module
|
|
|
|
||!geometry_shader_module
|
|
|
|
||!fragment_shader_module)
|
|
|
|
return(nullptr);
|
|
|
|
|
|
|
|
if(!vertex_shader_module->IsVertex())return(nullptr);
|
|
|
|
if(!geometry_shader_module->IsGeometry())return(nullptr);
|
|
|
|
if(!fragment_shader_module->IsFragment())return(nullptr);
|
|
|
|
|
|
|
|
ShaderModuleMap *smm=new ShaderModuleMap;
|
|
|
|
|
|
|
|
smm->Add(vertex_shader_module);
|
|
|
|
smm->Add(geometry_shader_module);
|
|
|
|
smm->Add(fragment_shader_module);
|
|
|
|
|
2021-09-09 18:20:17 +08:00
|
|
|
return CreateMaterial(mtl_name,smm,mds);
|
2021-06-16 11:43:19 +08:00
|
|
|
}
|
|
|
|
VK_NAMESPACE_END
|