From c7ae16b2c8e325bd0f527f08c4cba45ccdd656f0 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 24 Dec 2024 13:10:01 +0800 Subject: [PATCH] created RenderTargetManager they are codes from TextureManager --- CMCore | 2 +- CMSceneGraph | 2 +- CMUtil | 2 +- inc/hgl/graph/manager/RenderPassManager.h | 2 +- inc/hgl/graph/manager/RenderTargetManager.h | 27 +++++++++++++++++ inc/hgl/graph/manager/TextureManager.h | 15 ---------- inc/hgl/graph/module/GraphModule.h | 20 +++++-------- inc/hgl/graph/module/GraphModuleFactory.h | 4 +-- inc/hgl/graph/module/SwapchainModule.h | 4 ++- src/SceneGraph/CMakeLists.txt | 7 +++-- src/SceneGraph/manager/RenderPassManager.cpp | 7 +---- .../RenderTargetManager.cpp} | 9 +++--- .../RenderTargetManagerFBO.cpp} | 11 ++++--- src/SceneGraph/module/GraphModule.cpp | 29 ------------------- src/SceneGraph/module/SwapchainModule.cpp | 18 ++++++++---- 15 files changed, 71 insertions(+), 88 deletions(-) create mode 100644 inc/hgl/graph/manager/RenderTargetManager.h rename src/SceneGraph/{Vulkan/VKDeviceRenderTarget.cpp => manager/RenderTargetManager.cpp} (83%) rename src/SceneGraph/{Vulkan/VKDeviceFramebuffer.cpp => manager/RenderTargetManagerFBO.cpp} (87%) diff --git a/CMCore b/CMCore index ea101386..dbbd145f 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit ea101386d3705ee56b7a457b5b828c9f7894487d +Subproject commit dbbd145f03cd3d56c8535b9291b710e595d3b625 diff --git a/CMSceneGraph b/CMSceneGraph index 441ca9ce..b2f29ef0 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit 441ca9ce5558d6825c92c7dd1b9f93b80404fb41 +Subproject commit b2f29ef0cfaed232226f5c8460b1694b98fc25bd diff --git a/CMUtil b/CMUtil index 6582b635..5a05612f 160000 --- a/CMUtil +++ b/CMUtil @@ -1 +1 @@ -Subproject commit 6582b635c9b93284c29dd7e1bc6dc5ecf59a8705 +Subproject commit 5a05612f537391db5cbf4001b93ecbef591e4c2e diff --git a/inc/hgl/graph/manager/RenderPassManager.h b/inc/hgl/graph/manager/RenderPassManager.h index c3eb7383..ade8c1d5 100644 --- a/inc/hgl/graph/manager/RenderPassManager.h +++ b/inc/hgl/graph/manager/RenderPassManager.h @@ -26,7 +26,7 @@ private: GRAPH_MODULE_CONSTRUCT(RenderPassManager) ~RenderPassManager(); - bool Init(GraphModulesMap *) override; + bool Init() override; private: diff --git a/inc/hgl/graph/manager/RenderTargetManager.h b/inc/hgl/graph/manager/RenderTargetManager.h new file mode 100644 index 00000000..d1b14b71 --- /dev/null +++ b/inc/hgl/graph/manager/RenderTargetManager.h @@ -0,0 +1,27 @@ +#pragma once + +#include + +VK_NAMESPACE_BEGIN + +class RenderTargetManager:public GraphModule +{ +public: + + GRAPH_MODULE_CONSTRUCT(RenderTargetManager) + virtual ~RenderTargetManager(); + +public: //FrameBuffer相关 + + Framebuffer *CreateFBO(RenderPass *rp,ImageView **color_list,const uint image_count,ImageView *depth); +// Framebuffer *CreateFBO(RenderPass *,List &color,ImageView *depth); + Framebuffer *CreateFBO(RenderPass *,ImageView *color,ImageView *depth); + Framebuffer *CreateFBO(RenderPass *,ImageView *); + +public: + + RenderTarget *CreateRT( const FramebufferInfo *fbi,RenderPass *,const uint32_t fence_count=1); + RenderTarget *CreateRT( const FramebufferInfo *fbi,const uint32_t fence_count=1); +};//class RenderTargetManager + +VK_NAMESPACE_END diff --git a/inc/hgl/graph/manager/TextureManager.h b/inc/hgl/graph/manager/TextureManager.h index ba774cfe..64dbb752 100644 --- a/inc/hgl/graph/manager/TextureManager.h +++ b/inc/hgl/graph/manager/TextureManager.h @@ -12,8 +12,6 @@ VK_NAMESPACE_BEGIN class TextureManager:public GraphModule { - RenderPassManager *rp_manager=nullptr; - DeviceQueue *texture_queue=nullptr; TextureCmdBuffer *texture_cmd_buf=nullptr; @@ -126,18 +124,5 @@ public: // Load Texture2DArray * CreateTexture2DArray(const AnsiString &name,const uint32_t width,const uint32_t height,const uint32_t layer,const VkFormat &fmt,bool auto_mipmaps=false); bool LoadTexture2DToArray(Texture2DArray *,const uint32_t layer,const OSString &); - -public: //FrameBuffer相关 - - Framebuffer *CreateFBO(RenderPass *rp,ImageView **color_list,const uint image_count,ImageView *depth); -// Framebuffer *CreateFBO(RenderPass *,List &color,ImageView *depth); - Framebuffer *CreateFBO(RenderPass *,ImageView *color,ImageView *depth); - Framebuffer *CreateFBO(RenderPass *,ImageView *); - -public: - - RenderTarget *CreateRT( const FramebufferInfo *fbi,RenderPass *,const uint32_t fence_count=1); - RenderTarget *CreateRT( const FramebufferInfo *fbi,const uint32_t fence_count=1); };//class TextureManager - VK_NAMESPACE_END diff --git a/inc/hgl/graph/module/GraphModule.h b/inc/hgl/graph/module/GraphModule.h index 2d205d77..f8fc78af 100644 --- a/inc/hgl/graph/module/GraphModule.h +++ b/inc/hgl/graph/module/GraphModule.h @@ -38,9 +38,11 @@ public: } template - const bool Get(T *&gm)const + T *Get()const { - return gm_map_by_hash.Get(GetTypeHash(),gm); + GraphModule *gm; + + return gm_map_by_hash.Get(GetTypeHash(),gm)?(T *)gm:nullptr; } const bool IsLoaded(const AnsiIDName &name)const{return gm_map_by_name.ContainsKey(name);} @@ -101,8 +103,6 @@ class GraphModule:public Comparator bool module_enabled; bool module_ready; - GraphModulesMap dependent_modules; - protected: //GraphModule *GetModule(const AnsiIDName &name){return module_manager->GetModule(name,true);} ///<获取指定名称的模块 @@ -145,7 +145,10 @@ public: virtual const size_t GetTypeHash()const=0; - virtual bool InitDependentModules(GraphModulesMap *); ///<初始化依赖的模块 + /** + * 依赖的模块是在模板new之前就获取的,当前函数仅用于传递这些数据 + */ + virtual bool InitDependentModules(GraphModulesMap &){module_inited_dependent=true;return true;} ///<初始化依赖的模块 virtual bool Init()=0; ///<初始化当前模块 @@ -163,13 +166,6 @@ public: return(dependent_modules_name.Contains(gm.module_name)?1:-1); //如果我依赖于他,那么我比他大 } -public: - - GraphModule * GetDependentModule(const AnsiIDName &name){return dependent_modules.Get(name);} ///<获取指定名称的模块 - - template - T * GetDependentModule(){return dependent_modules.Get();} ///<获取指定类型的模块 - public: //回调事件 virtual void OnRenderTarget(RenderTarget *){} ///<设置渲染目标 diff --git a/inc/hgl/graph/module/GraphModuleFactory.h b/inc/hgl/graph/module/GraphModuleFactory.h index 53d35dba..38da46ea 100644 --- a/inc/hgl/graph/module/GraphModuleFactory.h +++ b/inc/hgl/graph/module/GraphModuleFactory.h @@ -48,9 +48,9 @@ public: } } - GraphModule *gm=new T(gmm,dgm_map); + GraphModule *gm=new T(gmm); - if(!gm->InitDependentModules(gmm)) + if(!gm->InitDependentModules(dgm)) { delete gm; return(nullptr); diff --git a/inc/hgl/graph/module/SwapchainModule.h b/inc/hgl/graph/module/SwapchainModule.h index 835a0a06..ea8f4160 100644 --- a/inc/hgl/graph/module/SwapchainModule.h +++ b/inc/hgl/graph/module/SwapchainModule.h @@ -32,7 +32,9 @@ public: GRAPH_MODULE_CONSTRUCT(SwapchainModule) virtual ~SwapchainModule(); - bool Init(GraphModulesMap *) override; + bool InitDependentModules(GraphModulesMap &) override; + + bool Init() override; bool BeginFrame(); void EndFrame(); diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 6ef3aa43..83bbfcb5 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -164,9 +164,7 @@ SET(VK_DEVICE_CREATER_SOURCE ${SG_INCLUDE_PATH}/VKDevice.h SET(VK_DEVICE_SOURCE Vulkan/VKDeviceMemory.cpp Vulkan/VKDeviceBuffer.cpp Vulkan/VKDeviceSampler.cpp - Vulkan/VKDeviceMaterial.cpp - Vulkan/VKDeviceFramebuffer.cpp - Vulkan/VKDeviceRenderTarget.cpp) + Vulkan/VKDeviceMaterial.cpp) SET(VK_PHYSICAL_DEVICE_SOURCE ${SG_INCLUDE_PATH}/VKPhysicalDevice.h Vulkan/VKPhysicalDevice.cpp @@ -297,11 +295,14 @@ SET(SG_MANAGER_HEADER_PATH ${SG_INCLUDE_PATH}/manager) SET(GRAPH_MANAGER_HEADER ${SG_MANAGER_HEADER_PATH}/TextureManager.h ${SG_MANAGER_HEADER_PATH}/RenderPassManager.h + ${SG_MANAGER_HEADER_PATH}/RenderTargetManager.h ${SG_MANAGER_HEADER_PATH}/MaterialManager.h ) SET(GRAPH_MANAGER_SOURCE manager/TextureManager.cpp manager/RenderPassManager.cpp + manager/RenderTargetManager.cpp + manager/RenderTargetManagerFBO.cpp manager/MaterialManager.cpp ) diff --git a/src/SceneGraph/manager/RenderPassManager.cpp b/src/SceneGraph/manager/RenderPassManager.cpp index 658af3d2..1754707e 100644 --- a/src/SceneGraph/manager/RenderPassManager.cpp +++ b/src/SceneGraph/manager/RenderPassManager.cpp @@ -184,13 +184,8 @@ bool CreateDepthAttachment( List &ref_list,ListGet(rp_manager); - pipeline_cache=GetDeviceAttribute()->pipeline_cache; hash=CreateRenderPassHash(); diff --git a/src/SceneGraph/Vulkan/VKDeviceRenderTarget.cpp b/src/SceneGraph/manager/RenderTargetManager.cpp similarity index 83% rename from src/SceneGraph/Vulkan/VKDeviceRenderTarget.cpp rename to src/SceneGraph/manager/RenderTargetManager.cpp index 2963c904..3912c242 100644 --- a/src/SceneGraph/Vulkan/VKDeviceRenderTarget.cpp +++ b/src/SceneGraph/manager/RenderTargetManager.cpp @@ -1,9 +1,8 @@ -#include -#include -#include +#include VK_NAMESPACE_BEGIN -RenderTarget *TextureManager::CreateRT(const FramebufferInfo *fbi,RenderPass *rp,const uint32_t fence_count) + +RenderTarget *RenderTargetManager::CreateRT(const FramebufferInfo *fbi,RenderPass *rp,const uint32_t fence_count) { if(!fbi)return(nullptr); if(!rp)return(nullptr); @@ -50,7 +49,7 @@ RenderTarget *TextureManager::CreateRT(const FramebufferInfo *fbi,RenderPass *rp return nullptr; } -RenderTarget *TextureManager::CreateRT(const FramebufferInfo *fbi,const uint32_t fence_count) +RenderTarget *RenderTargetManager::CreateRT(const FramebufferInfo *fbi,const uint32_t fence_count) { if(!fbi)return(nullptr); diff --git a/src/SceneGraph/Vulkan/VKDeviceFramebuffer.cpp b/src/SceneGraph/manager/RenderTargetManagerFBO.cpp similarity index 87% rename from src/SceneGraph/Vulkan/VKDeviceFramebuffer.cpp rename to src/SceneGraph/manager/RenderTargetManagerFBO.cpp index 0550dea9..486adf8f 100644 --- a/src/SceneGraph/Vulkan/VKDeviceFramebuffer.cpp +++ b/src/SceneGraph/manager/RenderTargetManagerFBO.cpp @@ -1,5 +1,4 @@ -#include -#include +#include VK_NAMESPACE_BEGIN VkFramebuffer CreateVulkanFramebuffer(VkDevice device,RenderPass *rp,const VkExtent2D &extent,VkImageView *attachments,const uint attachmentCount) @@ -21,7 +20,7 @@ VkFramebuffer CreateVulkanFramebuffer(VkDevice device,RenderPass *rp,const VkExt return fb; } -Framebuffer *TextureManager::CreateFBO(RenderPass *rp,ImageView **color_list,const uint image_count,ImageView *depth) +Framebuffer *RenderTargetManager::CreateFBO(RenderPass *rp,ImageView **color_list,const uint image_count,ImageView *depth) { uint att_count=image_count; @@ -90,7 +89,7 @@ Framebuffer *TextureManager::CreateFBO(RenderPass *rp,ImageView **color_list,con // return CreateFBO(rp,color.GetData(),color.GetCount(),depth); //} -Framebuffer *TextureManager::CreateFBO(RenderPass *rp,ImageView *color,ImageView *depth) +Framebuffer *RenderTargetManager::CreateFBO(RenderPass *rp,ImageView *color,ImageView *depth) { if(!rp)return(nullptr); if(!color&&!depth)return(nullptr); @@ -98,7 +97,7 @@ Framebuffer *TextureManager::CreateFBO(RenderPass *rp,ImageView *color,ImageView return CreateFBO(rp,&color,1,depth); } -Framebuffer *TextureManager::CreateFBO(RenderPass *rp,ImageView *iv) +Framebuffer *RenderTargetManager::CreateFBO(RenderPass *rp,ImageView *iv) { if(!rp)return(nullptr); if(!iv)return(nullptr); @@ -111,4 +110,4 @@ Framebuffer *TextureManager::CreateFBO(RenderPass *rp,ImageView *iv) else return nullptr; } -VK_NAMESPACE_END \ No newline at end of file +VK_NAMESPACE_END diff --git a/src/SceneGraph/module/GraphModule.cpp b/src/SceneGraph/module/GraphModule.cpp index c2c61418..cb22c91f 100644 --- a/src/SceneGraph/module/GraphModule.cpp +++ b/src/SceneGraph/module/GraphModule.cpp @@ -31,33 +31,4 @@ GraphModule::~GraphModule() LOG_INFO("GraphModule::~GraphModule: "+AnsiString(module_name.GetName())) } -bool GraphModule::InitDependentModules(GraphModulesMap *) -{ - auto dm_list=GetDependentModules(); - - if(!dm_list.IsEmpty()) - { - if(!gmm) - return(false); - - if(gmm->IsEmpty()) - return(false); - - for(auto dm_name:dm_list) - { - GraphModule *dm=gmm->Get(dm_name); - - if(dm&&dm->IsInited()) - { - dependent_modules.Add(dm); - continue; - } - - return(false); - } - } - - return(true); -} - VK_NAMESPACE_END diff --git a/src/SceneGraph/module/SwapchainModule.cpp b/src/SceneGraph/module/SwapchainModule.cpp index 4c6763c3..b6a8ef3c 100644 --- a/src/SceneGraph/module/SwapchainModule.cpp +++ b/src/SceneGraph/module/SwapchainModule.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -230,6 +230,18 @@ SwapchainModule::~SwapchainModule() delete swapchain; } +bool SwapchainModule::InitDependentModules(GraphModulesMap &dep_gmm) +{ + RenderPassManager *rp_manager=dep_gmm.Get(); + + if(!rp_manager) + return(false); + + SwapchainRenderbufferInfo rbi(swapchain->surface_format.format,swapchain->depth_format); + + swapchain_rp=rp_manager->AcquireRenderPass(&rbi); +} + bool SwapchainModule::Init() { if(!CreateSwapchain()) @@ -240,10 +252,6 @@ bool SwapchainModule::Init() if(!rpm) return(false); - SwapchainRenderbufferInfo rbi(swapchain->surface_format.format,swapchain->depth_format); - - swapchain_rp=rpm->AcquireRenderPass(&rbi); - //#ifdef _DEBUG // if(dev_attr->debug_utils) // dev_attr->debug_utils->SetRenderPass(swapchain_rp->GetVkRenderPass(),"SwapchainRenderPass");