diff --git a/CMCore b/CMCore index 6d9bced9..2dfcdf0e 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 6d9bced95c7fb7fe7a3b6c734d0e7330bacfb2d6 +Subproject commit 2dfcdf0e4114729384b1c8490c8ab048f9c11c80 diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index bf377175..78728deb 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -3,10 +3,11 @@ #include #include #include +#include VK_NAMESPACE_BEGIN -class GraphModule; +class GPUDevice; class TileData; class TileFont; class FontSource; @@ -70,10 +71,12 @@ protected: ObjectList module_list; - TextureManager * texture_manager =nullptr; - SwapchainModule * swapchain_module =nullptr; +protected: + + TextureManager * texture_manager =nullptr; + protected: ViewportInfo viewport_info; @@ -90,6 +93,12 @@ public: const uint64 GetFrameCount ()const noexcept{return frame_count;} ///<取得当前帧数 void RestartFrameCount ()noexcept{frame_count=0;} ///<重新开始统计帧数 +public: //module + + SwapchainModule *GetSwapchain(){return swapchain_module;} ///<取得Swapchain模块 + + template T *GetModule(){return graph_module_manager->GetModule(false);} ///<获取指定类型的模块 + public: NO_COPY_NO_MOVE(RenderFramework) @@ -97,7 +106,7 @@ public: RenderFramework(); virtual ~RenderFramework(); - virtual bool Init(); + virtual bool Init(); ///<初始化 virtual void StartTime(); diff --git a/inc/hgl/graph/VKRenderResource.h b/inc/hgl/graph/VKRenderResource.h index 752e2a04..4f7f765e 100644 --- a/inc/hgl/graph/VKRenderResource.h +++ b/inc/hgl/graph/VKRenderResource.h @@ -50,7 +50,6 @@ class RenderResource ShaderModuleMapByName shader_module_by_name[VK_SHADER_STAGE_TYPE_COUNT]; Map material_by_name; - //Map texture_by_name; IDObjectManage rm_material; ///<材质合集 IDObjectManage rm_material_instance; ///<材质实例合集 diff --git a/inc/hgl/graph/manager/TextureManager.h b/inc/hgl/graph/manager/TextureManager.h index fcfcc762..6623cc05 100644 --- a/inc/hgl/graph/manager/TextureManager.h +++ b/inc/hgl/graph/manager/TextureManager.h @@ -16,6 +16,8 @@ class TextureManager:public GraphManager SortedSet image_set; SortedSet texture_set; ///<纹理合集 + Map texture_by_name; + private: DeviceQueue *texture_queue; diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 844faa41..619dae81 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -1,20 +1,24 @@ #include -#include +#include #include VK_NAMESPACE_BEGIN +GraphModuleManager *InitGraphModuleManager(GPUDevice *dev); +bool ClearGraphModuleManager(GPUDevice *dev); + RenderFramework::RenderFramework() { - - graph_module_manager=InitGraphModuleManager(device); - swapchain_module=graph_module_manager->GetModule(device); + swapchain_module=graph_module_manager->GetModule(true); } RenderFramework::~RenderFramework() { +// if(swapchain_module)graph_module_manager->ReleaseModule(swapchain_module); + + ClearGraphModuleManager(device); } void RenderFramework::StartTime() diff --git a/src/SceneGraph/Vulkan/Texture/VKTexture2D.cpp b/src/SceneGraph/Vulkan/Texture/VKTexture2D.cpp index 74a6c605..14df3d2d 100644 --- a/src/SceneGraph/Vulkan/Texture/VKTexture2D.cpp +++ b/src/SceneGraph/Vulkan/Texture/VKTexture2D.cpp @@ -13,7 +13,7 @@ Texture2D *TextureManager::CreateTexture2D(TextureData *tex_data) if(!tex_data) return(nullptr); - Texture2D *tex=new Texture2D(GetVkDevice(),tex_data); + Texture2D *tex=new Texture2D(this,tex_data); texture_set.Add(tex); diff --git a/src/SceneGraph/Vulkan/Texture/VKTexture2DArray.cpp b/src/SceneGraph/Vulkan/Texture/VKTexture2DArray.cpp index 1d863fbb..6ef06ef3 100644 --- a/src/SceneGraph/Vulkan/Texture/VKTexture2DArray.cpp +++ b/src/SceneGraph/Vulkan/Texture/VKTexture2DArray.cpp @@ -13,7 +13,7 @@ Texture2DArray *TextureManager::CreateTexture2DArray(TextureData *tex_data) if(!tex_data) return(nullptr); - return(new Texture2DArray(GetVkDevice(),tex_data)); + return(new Texture2DArray(this,tex_data)); } Texture2DArray *TextureManager::CreateTexture2DArray(TextureCreateInfo *tci) diff --git a/src/SceneGraph/Vulkan/Texture/VKTextureCube.cpp b/src/SceneGraph/Vulkan/Texture/VKTextureCube.cpp index 59c3f2c1..504d0a0a 100644 --- a/src/SceneGraph/Vulkan/Texture/VKTextureCube.cpp +++ b/src/SceneGraph/Vulkan/Texture/VKTextureCube.cpp @@ -12,7 +12,7 @@ TextureCube *TextureManager::CreateTextureCube(TextureData *tex_data) if(!tex_data) return(nullptr); - return(new TextureCube(GetVkDevice(),tex_data)); + return(new TextureCube(this,tex_data)); } TextureCube *TextureManager::CreateTextureCube(TextureCreateInfo *tci) diff --git a/src/SceneGraph/Vulkan/VKDevice.cpp b/src/SceneGraph/Vulkan/VKDevice.cpp index 6de9abc4..5901b5b8 100644 --- a/src/SceneGraph/Vulkan/VKDevice.cpp +++ b/src/SceneGraph/Vulkan/VKDevice.cpp @@ -14,23 +14,16 @@ VK_NAMESPACE_BEGIN -GraphModuleManager *InitGraphModuleManager(GPUDevice *dev); bool ClearGraphModuleManager(GPUDevice *dev); GPUDevice::GPUDevice(GPUDeviceAttribute *da) { attr=da; - texture_queue=nullptr; - texture_cmd_buf=nullptr; - InitRenderPassManage(); sc_rt=nullptr; Resize(attr->surface_caps.currentExtent); - - texture_cmd_buf=CreateTextureCommandBuffer(attr->physical_device->GetDeviceName()+AnsiString(":TexCmdBuffer")); - texture_queue=CreateQueue(); } GPUDevice::~GPUDevice() @@ -39,9 +32,6 @@ GPUDevice::~GPUDevice() SAFE_CLEAR(sc_rt); - SAFE_CLEAR(texture_queue); - SAFE_CLEAR(texture_cmd_buf); - delete attr; //按设计,上面那些rt/queue/cmdbuf都需要走graph_module_manager释放和申请 diff --git a/src/SceneGraph/manager/TextureManager.cpp b/src/SceneGraph/manager/TextureManager.cpp index 646ff515..40b129d1 100644 --- a/src/SceneGraph/manager/TextureManager.cpp +++ b/src/SceneGraph/manager/TextureManager.cpp @@ -2,6 +2,18 @@ VK_NAMESPACE_BEGIN +TextureManager::TextureManager() +{ + texture_cmd_buf=CreateTextureCommandBuffer(attr->physical_device->GetDeviceName()+AnsiString(":TexCmdBuffer")); + texture_queue=CreateQueue(); +} + +TextureManager::~TextureManager() +{ + SAFE_CLEAR(texture_queue); + SAFE_CLEAR(texture_cmd_buf); +} + void TextureManager::Release(Texture *tex) { if(!tex) @@ -10,7 +22,7 @@ void TextureManager::Release(Texture *tex) texture_set.Delete(tex); } -Texture2D *CreateTexture2DFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps); +Texture2D *CreateTexture2DFromFile(TextureManager *tm,const OSString &filename,bool auto_mipmaps); Texture2D *TextureManager::LoadTexture2D(const OSString &filename,bool auto_mipmaps) { @@ -19,7 +31,7 @@ Texture2D *TextureManager::LoadTexture2D(const OSString &filename,bool auto_mipm if(texture_by_name.Get(filename,(Texture *&)tex)) return tex; - tex=CreateTexture2DFromFile(device,filename,auto_mipmaps); + tex=CreateTexture2DFromFile(this,filename,auto_mipmaps); if(tex) { @@ -43,7 +55,7 @@ Texture2D *TextureManager::LoadTexture2D(const OSString &filename,bool auto_mipm Texture2DArray *TextureManager::CreateTexture2DArray(const AnsiString &name,const uint32_t width,const uint32_t height,const uint32_t layer,const VkFormat &fmt,bool auto_mipmaps) { - Texture2DArray *ta=device->CreateTexture2DArray(width,height,layer,fmt,auto_mipmaps); + Texture2DArray *ta=CreateTexture2DArray(width,height,layer,fmt,auto_mipmaps); if(ta) Add(ta); @@ -70,13 +82,13 @@ bool TextureManager::LoadTexture2DToArray(Texture2DArray *ta,const uint32_t laye { if(!ta)return(false); - if(!LoadTexture2DLayerFromFile(device,ta,layer,filename,false)) + if(!LoadTexture2DLayerFromFile(this,ta,layer,filename,false)) return(false); return(true); } -TextureCube *CreateTextureCubeFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps); +TextureCube *CreateTextureCubeFromFile(TextureManager *tm,const OSString &filename,bool auto_mipmaps); TextureCube *TextureManager::LoadTextureCube(const OSString &filename,bool auto_mipmaps) { @@ -85,7 +97,7 @@ TextureCube *TextureManager::LoadTextureCube(const OSString &filename,bool auto_ if(texture_by_name.Get(filename,(Texture *&)tex)) return tex; - tex=CreateTextureCubeFromFile(device,filename,auto_mipmaps); + tex=CreateTextureCubeFromFile(this,filename,auto_mipmaps); if(tex) {