splited to GraphModuleManager.cpp
This commit is contained in:
parent
1183e44221
commit
983281f6ad
@ -13,7 +13,7 @@ namespace hgl
|
|||||||
|
|
||||||
struct RenderNode
|
struct RenderNode
|
||||||
{
|
{
|
||||||
uint index; ///<在MaterialRenderList中的索引
|
uint index; ///<在MaterialRenderList中的索引
|
||||||
|
|
||||||
SceneNode * scene_node;
|
SceneNode * scene_node;
|
||||||
|
|
||||||
|
@ -6,6 +6,10 @@
|
|||||||
#include<hgl/graph/VKInlinePipeline.h>
|
#include<hgl/graph/VKInlinePipeline.h>
|
||||||
#include<hgl/io/DataOutputStream.h>
|
#include<hgl/io/DataOutputStream.h>
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
/**
|
||||||
|
* 管线<br>
|
||||||
|
* 管线管理了一批次渲染的所有基础条件,包括顶点输入、着色器、混合、深度测试等等
|
||||||
|
*/
|
||||||
class Pipeline
|
class Pipeline
|
||||||
{
|
{
|
||||||
VkDevice device;
|
VkDevice device;
|
||||||
|
@ -65,7 +65,8 @@ public:
|
|||||||
virtual const bool IsRender(){return false;} ///<是否为渲染模块
|
virtual const bool IsRender(){return false;} ///<是否为渲染模块
|
||||||
|
|
||||||
GraphModuleManager *GetManager(){return module_manager;} ///<取得模块管理器
|
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,供通用模块使用)
|
static const AnsiIDName *GetModuleName(){return nullptr;} ///<取得模块名称(标准通用的名称,比如Upscale,供通用模块使用)
|
||||||
virtual const AnsiIDName *GetName()const{return &module_name;} ///<取得名称(完整的私有名称,比如FSR3Upscale,DLSS3Upscale)
|
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)
|
${SGM_HEADER_PATH}/SwapchainModule.h)
|
||||||
|
|
||||||
SET(GRAPH_MODULE_SOURCE module/GraphModule.cpp
|
SET(GRAPH_MODULE_SOURCE module/GraphModule.cpp
|
||||||
|
module/GraphModuleManager.cpp
|
||||||
module/GraphModuleFactory.cpp
|
module/GraphModuleFactory.cpp
|
||||||
module/RenderModule.cpp
|
module/RenderModule.cpp
|
||||||
module/RegistryCommonModule.cpp
|
module/RegistryCommonModule.cpp
|
||||||
|
@ -1,111 +1,11 @@
|
|||||||
#include<hgl/graph/module/GraphModule.h>
|
#include<hgl/graph/module/GraphModule.h>
|
||||||
#include<hgl/type/Map.h>
|
#include<hgl/graph/VKDevice.h>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
|
||||||
namespace
|
GPUDeviceAttribute *GraphModule::GetDeviceAttribute()
|
||||||
{
|
{
|
||||||
using GraphModuleManagerMap=Map<GPUDevice *,GraphModuleManager *>;
|
return module_manager->GetDevice()->GetDeviceAttribute();
|
||||||
|
|
||||||
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
|
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