use AnsiIDName instead of AnsiString in GraphModuleMap
This commit is contained in:
parent
7d586182c8
commit
e52f7c13a9
2
CMCore
2
CMCore
@ -1 +1 @@
|
||||
Subproject commit 5443a58987ec4fd3fdfb1df72f602c728940321a
|
||||
Subproject commit 6316f3cd59aa749ca31226f82fc764dd77ac40ff
|
@ -1,17 +1,56 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/graph/VK.h>
|
||||
#include<hgl/type/IDName.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
class RenderCmdBuffer;
|
||||
class GraphModuleManager;
|
||||
class GraphModule;
|
||||
|
||||
class GraphModuleManager
|
||||
{
|
||||
GPUDevice *device;
|
||||
|
||||
Map<AnsiIDName,GraphModule *> graph_module_map;
|
||||
|
||||
public:
|
||||
|
||||
GraphModuleManager(GPUDevice *dev){device=dev;}
|
||||
~GraphModuleManager();
|
||||
|
||||
GPUDevice *GetDevice(){return device;} ///<取得GPU设备
|
||||
|
||||
/**
|
||||
* 获取指定名称的模块
|
||||
* @param create 如果不存在,是否创建新的
|
||||
*/
|
||||
GraphModule *GetModule(const AnsiIDName &name,bool create); ///<获取指定名称的模块
|
||||
|
||||
/**
|
||||
* 获取指定类型的模块
|
||||
* @param create 如果不存在,是否创建新的
|
||||
*/
|
||||
template<typename T>
|
||||
T *GetModule(bool create=false){return (T *)GetModule(T::GetModuleName(),create);} ///<获取指定类型的模块
|
||||
|
||||
const bool IsLoaded(const AnsiIDName &name){return graph_module_map.ContainsKey(name);} ///<是否已经加载了指定类型的模块
|
||||
|
||||
template<typename T>
|
||||
const bool IsLoaded(){return graph_module_map.ContainsKey(T::GetModuleName());} ///<是否已经加载了指定类型的模块
|
||||
|
||||
public: //事件
|
||||
|
||||
void OnResize(const VkExtent2D &);
|
||||
};//class GraphModuleManager
|
||||
|
||||
GraphModuleManager *GetGraphModuleManager(GPUDevice *);
|
||||
|
||||
class GraphModule
|
||||
{
|
||||
GraphModuleManager *module_manager;
|
||||
|
||||
AnsiString module_name;
|
||||
AnsiIDName module_name;
|
||||
|
||||
bool module_enable;
|
||||
bool module_ready;
|
||||
@ -26,9 +65,10 @@ public:
|
||||
virtual const bool IsRender(){return false;} ///<是否为渲染模块
|
||||
|
||||
GraphModuleManager *GetManager(){return module_manager;} ///<取得模块管理器
|
||||
GPUDevice *GetDevice(){return module_manager->GetDevice();} ///<取得GPU设备
|
||||
|
||||
static const char *GetModuleName(){return nullptr;} ///<取得模块名称(标准通用的名称,比如Upscale,供通用模块使用)
|
||||
virtual const char *GetName()const{return module_name.c_str();} ///<取得名称(完整的私有名称,比如FSR3Upscale,DLSS3Upscale)
|
||||
static const AnsiIDName *GetModuleName(){return nullptr;} ///<取得模块名称(标准通用的名称,比如Upscale,供通用模块使用)
|
||||
virtual const AnsiIDName *GetName()const{return &module_name;} ///<取得名称(完整的私有名称,比如FSR3Upscale,DLSS3Upscale)
|
||||
|
||||
const bool IsEnable ()const noexcept{return module_enable;} ///<当前模块是否启用
|
||||
const bool IsReady ()const noexcept{return module_ready;} ///<当前模块是否准备好
|
||||
@ -37,7 +77,7 @@ public:
|
||||
|
||||
NO_COPY_NO_MOVE(GraphModule)
|
||||
|
||||
GraphModule(GraphModuleManager *gmm,const AnsiString &name)
|
||||
GraphModule(GraphModuleManager *gmm,const AnsiIDName &name)
|
||||
{
|
||||
module_manager=gmm;
|
||||
module_name=name;
|
||||
@ -56,35 +96,14 @@ public: //回调事件
|
||||
virtual void OnPostFrame(){} ///<帧绘制后回调
|
||||
};//class GraphModule
|
||||
|
||||
class GraphModuleManager
|
||||
{
|
||||
GPUDevice *device;
|
||||
|
||||
Map<AnsiString,GraphModule *> graph_module_map;
|
||||
|
||||
protected:
|
||||
|
||||
GraphModule *GetModule(const AnsiString &name,bool create);
|
||||
|
||||
public:
|
||||
|
||||
GraphModuleManager(GPUDevice *dev){device=dev;}
|
||||
~GraphModuleManager();
|
||||
|
||||
/**
|
||||
* 获取指定类型的模块
|
||||
* @param create 如果不存在,是否创建新的
|
||||
*/
|
||||
template<typename T> T *GetModule(bool create=false)
|
||||
{
|
||||
return (T *)GetModule(T::GetModuleName(),create);
|
||||
}
|
||||
|
||||
public: //事件
|
||||
|
||||
void OnResize(const VkExtent2D &);
|
||||
};//class GraphModuleManager
|
||||
|
||||
GraphModuleManager *GetGraphModuleManager(GPUDevice *);
|
||||
#define GRAPH_MODULE_CONSTRUCT(name) public:\
|
||||
NO_COPY_NO_MOVE(name##Module) \
|
||||
static const AnsiIDName &GetModuleName() \
|
||||
{ \
|
||||
static const AnsiIDName id_name(#name); \
|
||||
return id_name; \
|
||||
} \
|
||||
\
|
||||
name##Module(GraphModuleManager *gmm):GraphModule(gmm,GetModuleName()){}
|
||||
|
||||
VK_NAMESPACE_END
|
||||
|
@ -8,13 +8,7 @@ class SwapchainModule:public GraphModule
|
||||
{
|
||||
public:
|
||||
|
||||
static const char *GetModuleName(){return "Swapchain";}
|
||||
|
||||
public:
|
||||
|
||||
NO_COPY_NO_MOVE(SwapchainModule);
|
||||
|
||||
SwapchainModule(GraphModuleManager *gmm):GraphModule(gmm,"Swapchain"){}
|
||||
GRAPH_MODULE_CONSTRUCT(Swapchain)
|
||||
virtual ~SwapchainModule()=default;
|
||||
|
||||
};//class SwapchainModule:public RenderModule
|
||||
|
@ -71,7 +71,7 @@ void RenderAssignBuffer::StatL2W(const RenderNodeList &rn_list)
|
||||
RenderNode *rn=rn_list.GetData();
|
||||
Matrix4f *l2wp=(Matrix4f *)(l2w_buffer->DeviceBuffer::Map());
|
||||
|
||||
for(uint i=0;i<rn_list.GetCount();i++)
|
||||
for(int i=0;i<rn_list.GetCount();i++)
|
||||
{
|
||||
*l2wp=rn->scene_node->GetLocalToWorldMatrix();
|
||||
++l2wp;
|
||||
@ -215,7 +215,7 @@ void RenderAssignBuffer::WriteNode(const RenderNodeList &rn_list)
|
||||
|
||||
AssignData *adp=(AssignData *)(assign_vab->DeviceBuffer::Map());
|
||||
|
||||
for(uint i=0;i<rn_list.GetCount();i++)
|
||||
for(int i=0;i<rn_list.GetCount();i++)
|
||||
{
|
||||
rn->l2w_index=i;
|
||||
|
||||
|
@ -47,7 +47,7 @@ private:
|
||||
|
||||
private: //LocalToWorld矩阵数据
|
||||
|
||||
uint32 l2w_buffer_max_count; ///<LocalToWorld矩阵最大数量
|
||||
int l2w_buffer_max_count; ///<LocalToWorld矩阵最大数量
|
||||
DeviceBuffer *l2w_buffer; ///<LocalToWorld矩阵数据(UBO/SSBO)
|
||||
|
||||
void StatL2W(const RenderNodeList &);
|
||||
@ -63,7 +63,7 @@ private: //材质实例数据
|
||||
|
||||
private: //分发数据
|
||||
|
||||
uint32 node_count; ///<节点数量
|
||||
int node_count; ///<节点数量
|
||||
|
||||
VAB *assign_vab; ///<分发数据VAB(RG16UI格式,R存L2W ID,G存材质实例ID)
|
||||
VkBuffer assign_buffer; ///<分发数据Buffer
|
||||
|
@ -67,9 +67,9 @@ GraphModuleManager *GetGraphModuleManager(GPUDevice *dev)
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
GraphModule *CreateGraphModule(const AnsiString &name,GraphModuleManager *gmm);
|
||||
GraphModule *CreateGraphModule(const AnsiIDName &name,GraphModuleManager *gmm);
|
||||
|
||||
GraphModule *GraphModuleManager::GetModule(const AnsiString &name,bool create)
|
||||
GraphModule *GraphModuleManager::GetModule(const AnsiIDName &name,bool create)
|
||||
{
|
||||
GraphModule *gm;
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include<hgl/graph/module/GraphModuleFactory.h>
|
||||
#include<hgl/type/IDName.h>
|
||||
#include<hgl/type/Map.h>
|
||||
#include<hgl/type/String.h>
|
||||
|
||||
@ -6,7 +7,7 @@ VK_NAMESPACE_BEGIN
|
||||
|
||||
namespace
|
||||
{
|
||||
using GraphModuleFactoryMap=ObjectMap<AnsiString,GraphModuleFactory>;
|
||||
using GraphModuleFactoryMap=ObjectMap<AnsiIDName,GraphModuleFactory>;
|
||||
|
||||
static GraphModuleFactoryMap *gmf_map=nullptr;
|
||||
}
|
||||
@ -32,7 +33,7 @@ bool RegistryGraphModuleFactory(const char *module_name,GraphModuleFactory *gmf)
|
||||
if(!gmf_map)
|
||||
InitGraphModuleFactory();
|
||||
|
||||
AnsiString name=module_name;
|
||||
AnsiIDName name(module_name);
|
||||
|
||||
if(gmf_map->ContainsKey(name))
|
||||
return(false);
|
||||
@ -42,14 +43,11 @@ bool RegistryGraphModuleFactory(const char *module_name,GraphModuleFactory *gmf)
|
||||
return(true);
|
||||
}
|
||||
|
||||
GraphModule *CreateGraphModule(const AnsiString &name,GraphModuleManager *gmm)
|
||||
GraphModule *CreateGraphModule(const AnsiIDName &name,GraphModuleManager *gmm)
|
||||
{
|
||||
if(!gmm)
|
||||
return(nullptr);
|
||||
|
||||
if(name.IsEmpty())
|
||||
return(nullptr);
|
||||
|
||||
if(!gmf_map)
|
||||
return(nullptr);
|
||||
|
||||
|
@ -3,6 +3,6 @@
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
REGISTRY_GRAPH_MODULE(SwapchainModule)
|
||||
//REGISTRY_GRAPH_MODULE(SwapchainModule)
|
||||
|
||||
VK_NAMESPACE_END
|
||||
|
Loading…
x
Reference in New Issue
Block a user