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
|
#pragma once
|
||||||
|
|
||||||
#include<hgl/graph/VK.h>
|
#include<hgl/graph/VK.h>
|
||||||
|
#include<hgl/type/IDName.h>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
|
||||||
class RenderCmdBuffer;
|
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
|
class GraphModule
|
||||||
{
|
{
|
||||||
GraphModuleManager *module_manager;
|
GraphModuleManager *module_manager;
|
||||||
|
|
||||||
AnsiString module_name;
|
AnsiIDName module_name;
|
||||||
|
|
||||||
bool module_enable;
|
bool module_enable;
|
||||||
bool module_ready;
|
bool module_ready;
|
||||||
@ -26,9 +65,10 @@ 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设备
|
||||||
|
|
||||||
static const char *GetModuleName(){return nullptr;} ///<取得模块名称(标准通用的名称,比如Upscale,供通用模块使用)
|
static const AnsiIDName *GetModuleName(){return nullptr;} ///<取得模块名称(标准通用的名称,比如Upscale,供通用模块使用)
|
||||||
virtual const char *GetName()const{return module_name.c_str();} ///<取得名称(完整的私有名称,比如FSR3Upscale,DLSS3Upscale)
|
virtual const AnsiIDName *GetName()const{return &module_name;} ///<取得名称(完整的私有名称,比如FSR3Upscale,DLSS3Upscale)
|
||||||
|
|
||||||
const bool IsEnable ()const noexcept{return module_enable;} ///<当前模块是否启用
|
const bool IsEnable ()const noexcept{return module_enable;} ///<当前模块是否启用
|
||||||
const bool IsReady ()const noexcept{return module_ready;} ///<当前模块是否准备好
|
const bool IsReady ()const noexcept{return module_ready;} ///<当前模块是否准备好
|
||||||
@ -37,7 +77,7 @@ public:
|
|||||||
|
|
||||||
NO_COPY_NO_MOVE(GraphModule)
|
NO_COPY_NO_MOVE(GraphModule)
|
||||||
|
|
||||||
GraphModule(GraphModuleManager *gmm,const AnsiString &name)
|
GraphModule(GraphModuleManager *gmm,const AnsiIDName &name)
|
||||||
{
|
{
|
||||||
module_manager=gmm;
|
module_manager=gmm;
|
||||||
module_name=name;
|
module_name=name;
|
||||||
@ -56,35 +96,14 @@ public: //回调事件
|
|||||||
virtual void OnPostFrame(){} ///<帧绘制后回调
|
virtual void OnPostFrame(){} ///<帧绘制后回调
|
||||||
};//class GraphModule
|
};//class GraphModule
|
||||||
|
|
||||||
class GraphModuleManager
|
#define GRAPH_MODULE_CONSTRUCT(name) public:\
|
||||||
{
|
NO_COPY_NO_MOVE(name##Module) \
|
||||||
GPUDevice *device;
|
static const AnsiIDName &GetModuleName() \
|
||||||
|
{ \
|
||||||
Map<AnsiString,GraphModule *> graph_module_map;
|
static const AnsiIDName id_name(#name); \
|
||||||
|
return id_name; \
|
||||||
protected:
|
} \
|
||||||
|
\
|
||||||
GraphModule *GetModule(const AnsiString &name,bool create);
|
name##Module(GraphModuleManager *gmm):GraphModule(gmm,GetModuleName()){}
|
||||||
|
|
||||||
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 *);
|
|
||||||
|
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
|
@ -8,13 +8,7 @@ class SwapchainModule:public GraphModule
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static const char *GetModuleName(){return "Swapchain";}
|
GRAPH_MODULE_CONSTRUCT(Swapchain)
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
NO_COPY_NO_MOVE(SwapchainModule);
|
|
||||||
|
|
||||||
SwapchainModule(GraphModuleManager *gmm):GraphModule(gmm,"Swapchain"){}
|
|
||||||
virtual ~SwapchainModule()=default;
|
virtual ~SwapchainModule()=default;
|
||||||
|
|
||||||
};//class SwapchainModule:public RenderModule
|
};//class SwapchainModule:public RenderModule
|
||||||
|
@ -71,7 +71,7 @@ void RenderAssignBuffer::StatL2W(const RenderNodeList &rn_list)
|
|||||||
RenderNode *rn=rn_list.GetData();
|
RenderNode *rn=rn_list.GetData();
|
||||||
Matrix4f *l2wp=(Matrix4f *)(l2w_buffer->DeviceBuffer::Map());
|
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=rn->scene_node->GetLocalToWorldMatrix();
|
||||||
++l2wp;
|
++l2wp;
|
||||||
@ -215,7 +215,7 @@ void RenderAssignBuffer::WriteNode(const RenderNodeList &rn_list)
|
|||||||
|
|
||||||
AssignData *adp=(AssignData *)(assign_vab->DeviceBuffer::Map());
|
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;
|
rn->l2w_index=i;
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ private:
|
|||||||
|
|
||||||
private: //LocalToWorld矩阵数据
|
private: //LocalToWorld矩阵数据
|
||||||
|
|
||||||
uint32 l2w_buffer_max_count; ///<LocalToWorld矩阵最大数量
|
int l2w_buffer_max_count; ///<LocalToWorld矩阵最大数量
|
||||||
DeviceBuffer *l2w_buffer; ///<LocalToWorld矩阵数据(UBO/SSBO)
|
DeviceBuffer *l2w_buffer; ///<LocalToWorld矩阵数据(UBO/SSBO)
|
||||||
|
|
||||||
void StatL2W(const RenderNodeList &);
|
void StatL2W(const RenderNodeList &);
|
||||||
@ -63,7 +63,7 @@ private: //材质实例数据
|
|||||||
|
|
||||||
private: //分发数据
|
private: //分发数据
|
||||||
|
|
||||||
uint32 node_count; ///<节点数量
|
int node_count; ///<节点数量
|
||||||
|
|
||||||
VAB *assign_vab; ///<分发数据VAB(RG16UI格式,R存L2W ID,G存材质实例ID)
|
VAB *assign_vab; ///<分发数据VAB(RG16UI格式,R存L2W ID,G存材质实例ID)
|
||||||
VkBuffer assign_buffer; ///<分发数据Buffer
|
VkBuffer assign_buffer; ///<分发数据Buffer
|
||||||
|
@ -67,9 +67,9 @@ GraphModuleManager *GetGraphModuleManager(GPUDevice *dev)
|
|||||||
return(nullptr);
|
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;
|
GraphModule *gm;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include<hgl/graph/module/GraphModuleFactory.h>
|
#include<hgl/graph/module/GraphModuleFactory.h>
|
||||||
|
#include<hgl/type/IDName.h>
|
||||||
#include<hgl/type/Map.h>
|
#include<hgl/type/Map.h>
|
||||||
#include<hgl/type/String.h>
|
#include<hgl/type/String.h>
|
||||||
|
|
||||||
@ -6,7 +7,7 @@ VK_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
using GraphModuleFactoryMap=ObjectMap<AnsiString,GraphModuleFactory>;
|
using GraphModuleFactoryMap=ObjectMap<AnsiIDName,GraphModuleFactory>;
|
||||||
|
|
||||||
static GraphModuleFactoryMap *gmf_map=nullptr;
|
static GraphModuleFactoryMap *gmf_map=nullptr;
|
||||||
}
|
}
|
||||||
@ -32,7 +33,7 @@ bool RegistryGraphModuleFactory(const char *module_name,GraphModuleFactory *gmf)
|
|||||||
if(!gmf_map)
|
if(!gmf_map)
|
||||||
InitGraphModuleFactory();
|
InitGraphModuleFactory();
|
||||||
|
|
||||||
AnsiString name=module_name;
|
AnsiIDName name(module_name);
|
||||||
|
|
||||||
if(gmf_map->ContainsKey(name))
|
if(gmf_map->ContainsKey(name))
|
||||||
return(false);
|
return(false);
|
||||||
@ -42,14 +43,11 @@ bool RegistryGraphModuleFactory(const char *module_name,GraphModuleFactory *gmf)
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphModule *CreateGraphModule(const AnsiString &name,GraphModuleManager *gmm)
|
GraphModule *CreateGraphModule(const AnsiIDName &name,GraphModuleManager *gmm)
|
||||||
{
|
{
|
||||||
if(!gmm)
|
if(!gmm)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
if(name.IsEmpty())
|
|
||||||
return(nullptr);
|
|
||||||
|
|
||||||
if(!gmf_map)
|
if(!gmf_map)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
|
||||||
REGISTRY_GRAPH_MODULE(SwapchainModule)
|
//REGISTRY_GRAPH_MODULE(SwapchainModule)
|
||||||
|
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
|
Loading…
x
Reference in New Issue
Block a user