use AnsiIDName instead of AnsiString in GraphModuleMap

This commit is contained in:
hyzboy 2024-10-23 23:22:41 +08:00
parent 7d586182c8
commit e52f7c13a9
8 changed files with 67 additions and 56 deletions

2
CMCore

@ -1 +1 @@
Subproject commit 5443a58987ec4fd3fdfb1df72f602c728940321a
Subproject commit 6316f3cd59aa749ca31226f82fc764dd77ac40ff

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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 IDG存材质实例ID)
VkBuffer assign_buffer; ///<分发数据Buffer

View File

@ -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;

View File

@ -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);

View File

@ -3,6 +3,6 @@
VK_NAMESPACE_BEGIN
REGISTRY_GRAPH_MODULE(SwapchainModule)
//REGISTRY_GRAPH_MODULE(SwapchainModule)
VK_NAMESPACE_END