splited to GraphModuleManager.cpp
This commit is contained in:
parent
1183e44221
commit
983281f6ad
@ -6,6 +6,10 @@
|
||||
#include<hgl/graph/VKInlinePipeline.h>
|
||||
#include<hgl/io/DataOutputStream.h>
|
||||
VK_NAMESPACE_BEGIN
|
||||
/**
|
||||
* 管线<br>
|
||||
* 管线管理了一批次渲染的所有基础条件,包括顶点输入、着色器、混合、深度测试等等
|
||||
*/
|
||||
class Pipeline
|
||||
{
|
||||
VkDevice device;
|
||||
|
@ -65,7 +65,8 @@ public:
|
||||
virtual const bool IsRender(){return false;} ///<是否为渲染模块
|
||||
|
||||
GraphModuleManager *GetManager(){return module_manager;} ///<取得模块管理器
|
||||
GPUDevice *GetDevice(){return module_manager->GetDevice();} ///<取得GPU设备
|
||||
GPUDevice * GetDevice(){return module_manager->GetDevice();} ///<取得GPU设备
|
||||
GPUDeviceAttribute *GetDeviceAttribute();
|
||||
|
||||
static const AnsiIDName *GetModuleName(){return nullptr;} ///<取得模块名称(标准通用的名称,比如Upscale,供通用模块使用)
|
||||
virtual const AnsiIDName *GetName()const{return &module_name;} ///<取得名称(完整的私有名称,比如FSR3Upscale,DLSS3Upscale)
|
||||
|
@ -284,6 +284,7 @@ SET(GRAPH_MODULE_HEADER ${SGM_HEADER_PATH}/GraphModule.h
|
||||
${SGM_HEADER_PATH}/SwapchainModule.h)
|
||||
|
||||
SET(GRAPH_MODULE_SOURCE module/GraphModule.cpp
|
||||
module/GraphModuleManager.cpp
|
||||
module/GraphModuleFactory.cpp
|
||||
module/RenderModule.cpp
|
||||
module/RegistryCommonModule.cpp
|
||||
|
@ -1,111 +1,11 @@
|
||||
#include<hgl/graph/module/GraphModule.h>
|
||||
#include<hgl/type/Map.h>
|
||||
#include<hgl/graph/VKDevice.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
namespace
|
||||
GPUDeviceAttribute *GraphModule::GetDeviceAttribute()
|
||||
{
|
||||
using GraphModuleManagerMap=Map<GPUDevice *,GraphModuleManager *>;
|
||||
|
||||
static GraphModuleManagerMap *graph_module_manager_map=nullptr;
|
||||
}
|
||||
|
||||
GraphModuleManager *InitGraphModuleManager(GPUDevice *dev)
|
||||
{
|
||||
if(!dev)
|
||||
return(nullptr);
|
||||
|
||||
if(graph_module_manager_map)
|
||||
{
|
||||
if(graph_module_manager_map->ContainsKey(dev))
|
||||
return(nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
graph_module_manager_map=new GraphModuleManagerMap;
|
||||
}
|
||||
|
||||
GraphModuleManager *gmm=new GraphModuleManager(dev);
|
||||
|
||||
graph_module_manager_map->Add(dev,gmm);
|
||||
|
||||
return gmm;
|
||||
}
|
||||
|
||||
bool ClearGraphModuleManager(GPUDevice *dev)
|
||||
{
|
||||
if(!dev)
|
||||
return(false);
|
||||
|
||||
if(!graph_module_manager_map)
|
||||
return(false);
|
||||
|
||||
GraphModuleManager *gmm;
|
||||
|
||||
if(!graph_module_manager_map->Get(dev,gmm))
|
||||
return(false);
|
||||
|
||||
graph_module_manager_map->DeleteByKey(dev);
|
||||
|
||||
delete gmm;
|
||||
return(true);
|
||||
}
|
||||
|
||||
GraphModuleManager *GetGraphModuleManager(GPUDevice *dev)
|
||||
{
|
||||
if(!dev)
|
||||
return(nullptr);
|
||||
|
||||
if(!graph_module_manager_map)
|
||||
return(nullptr);
|
||||
|
||||
GraphModuleManager *gmm;
|
||||
|
||||
if(graph_module_manager_map->Get(dev,gmm))
|
||||
return gmm;
|
||||
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
GraphModule *CreateGraphModule(const AnsiIDName &name,GraphModuleManager *gmm);
|
||||
|
||||
GraphModule *GraphModuleManager::GetModule(const AnsiIDName &name,bool create)
|
||||
{
|
||||
GraphModule *gm;
|
||||
|
||||
if(graph_module_map.Get(name,gm))
|
||||
return gm;
|
||||
|
||||
if(create)
|
||||
{
|
||||
gm=CreateGraphModule(name,this);
|
||||
|
||||
if(gm)
|
||||
graph_module_map.Add(name,gm);
|
||||
|
||||
return gm;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
GraphModuleManager::~GraphModuleManager()
|
||||
{
|
||||
for(auto *gm:graph_module_map)
|
||||
{
|
||||
delete gm->value;
|
||||
}
|
||||
}
|
||||
|
||||
void GraphModuleManager::OnResize(const VkExtent2D &extent)
|
||||
{
|
||||
if(graph_module_map.IsEmpty())
|
||||
return;
|
||||
|
||||
for(auto *gm:graph_module_map)
|
||||
{
|
||||
gm->value->OnResize(extent);
|
||||
}
|
||||
return module_manager->GetDevice()->GetDeviceAttribute();
|
||||
}
|
||||
|
||||
VK_NAMESPACE_END
|
||||
|
111
src/SceneGraph/module/GraphModuleManager.cpp
Normal file
111
src/SceneGraph/module/GraphModuleManager.cpp
Normal file
@ -0,0 +1,111 @@
|
||||
#include<hgl/graph/module/GraphModule.h>
|
||||
#include<hgl/type/Map.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
namespace
|
||||
{
|
||||
using GraphModuleManagerMap=Map<GPUDevice *,GraphModuleManager *>;
|
||||
|
||||
static GraphModuleManagerMap *graph_module_manager_map=nullptr;
|
||||
}
|
||||
|
||||
GraphModuleManager *InitGraphModuleManager(GPUDevice *dev)
|
||||
{
|
||||
if(!dev)
|
||||
return(nullptr);
|
||||
|
||||
if(graph_module_manager_map)
|
||||
{
|
||||
if(graph_module_manager_map->ContainsKey(dev))
|
||||
return(nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
graph_module_manager_map=new GraphModuleManagerMap;
|
||||
}
|
||||
|
||||
GraphModuleManager *gmm=new GraphModuleManager(dev);
|
||||
|
||||
graph_module_manager_map->Add(dev,gmm);
|
||||
|
||||
return gmm;
|
||||
}
|
||||
|
||||
bool ClearGraphModuleManager(GPUDevice *dev)
|
||||
{
|
||||
if(!dev)
|
||||
return(false);
|
||||
|
||||
if(!graph_module_manager_map)
|
||||
return(false);
|
||||
|
||||
GraphModuleManager *gmm;
|
||||
|
||||
if(!graph_module_manager_map->Get(dev,gmm))
|
||||
return(false);
|
||||
|
||||
graph_module_manager_map->DeleteByKey(dev);
|
||||
|
||||
delete gmm;
|
||||
return(true);
|
||||
}
|
||||
|
||||
GraphModuleManager *GetGraphModuleManager(GPUDevice *dev)
|
||||
{
|
||||
if(!dev)
|
||||
return(nullptr);
|
||||
|
||||
if(!graph_module_manager_map)
|
||||
return(nullptr);
|
||||
|
||||
GraphModuleManager *gmm;
|
||||
|
||||
if(graph_module_manager_map->Get(dev,gmm))
|
||||
return gmm;
|
||||
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
GraphModule *CreateGraphModule(const AnsiIDName &name,GraphModuleManager *gmm);
|
||||
|
||||
GraphModule *GraphModuleManager::GetModule(const AnsiIDName &name,bool create)
|
||||
{
|
||||
GraphModule *gm;
|
||||
|
||||
if(graph_module_map.Get(name,gm))
|
||||
return gm;
|
||||
|
||||
if(create)
|
||||
{
|
||||
gm=CreateGraphModule(name,this);
|
||||
|
||||
if(gm)
|
||||
graph_module_map.Add(name,gm);
|
||||
|
||||
return gm;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
GraphModuleManager::~GraphModuleManager()
|
||||
{
|
||||
for(auto *gm:graph_module_map)
|
||||
{
|
||||
delete gm->value;
|
||||
}
|
||||
}
|
||||
|
||||
void GraphModuleManager::OnResize(const VkExtent2D &extent)
|
||||
{
|
||||
if(graph_module_map.IsEmpty())
|
||||
return;
|
||||
|
||||
for(auto *gm:graph_module_map)
|
||||
{
|
||||
gm->value->OnResize(extent);
|
||||
}
|
||||
}
|
||||
|
||||
VK_NAMESPACE_END
|
Loading…
x
Reference in New Issue
Block a user