diff --git a/CMCore b/CMCore index 3f5baa99..b78d31d8 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 3f5baa99d0c0a76135b48fa67b43b9c4d58a8332 +Subproject commit b78d31d8a01ff4e7e86bf433f9046a3f783d63fa diff --git a/CMPlatform b/CMPlatform index aa7abe47..67e8e956 160000 --- a/CMPlatform +++ b/CMPlatform @@ -1 +1 @@ -Subproject commit aa7abe47631cdb687528400409ef295fd2c050b8 +Subproject commit 67e8e956658cb9abbb94cd01f0a465e8275b44dd diff --git a/inc/hgl/WorkManager.h b/inc/hgl/WorkManager.h index 5c20e73a..549bd11c 100644 --- a/inc/hgl/WorkManager.h +++ b/inc/hgl/WorkManager.h @@ -7,7 +7,7 @@ namespace hgl /** * 工作管理器,管理一个序列的WorkObject
*/ - class WorkManager:public io::WindowEvent + class WorkManager { protected: @@ -44,19 +44,10 @@ namespace hgl virtual void Render(WorkObject *wo); - virtual void OnResize(uint w,uint h) override - { - if(!cur_work_object)return; - - VkExtent2D ext={w,h}; - - cur_work_object->OnResize(ext); - } - void Run(WorkObject *wo); };//class WorkManager - class SwapchainWorkManager:public WorkManager + class SwapchainWorkManager:public WorkManager,public io::WindowEvent { graph::SwapchainModule *swpachain_module; @@ -66,11 +57,12 @@ namespace hgl { swpachain_module=rf->GetSwapchainModule(); - rf->GetWindow()->Join(this); + render_framework->Join(this); } + ~SwapchainWorkManager() { - render_framework->GetWindow()->Unjoin(this); + render_framework->Unjoin(this); } void Render(WorkObject *wo) override; diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 155f6710..8ab86fed 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -109,8 +109,6 @@ bool RenderFramework::Init(uint w,uint h) sc_module=new SwapchainModule(this,tex_manager,rt_manager,rp_manager); module_manager->Registry(sc_module); - OnResize(w,h); - render_resource=new RenderResource(device); return(true); @@ -118,8 +116,6 @@ bool RenderFramework::Init(uint w,uint h) void RenderFramework::OnResize(uint w,uint h) { - io::WindowEvent::OnResize(w,h); - VkExtent2D ext(w,h); sc_module->OnResize(ext); //其实swapchain_module并不需要传递尺寸数据过去 diff --git a/src/SceneGraph/Vulkan/VKTileFont.cpp b/src/SceneGraph/Vulkan/VKTileFont.cpp index 896607a6..99f77c51 100644 --- a/src/SceneGraph/Vulkan/VKTileFont.cpp +++ b/src/SceneGraph/Vulkan/VKTileFont.cpp @@ -17,7 +17,13 @@ TileFont *RenderFramework::CreateTileFont(FontSource *fs,int limit_count) if(limit_count<=0) { - const VkExtent2D &ext=sc_module->GetSwapchainSize(); + VkExtent2D ext; + + if(!sc_module->GetSwapchainSize(&ext)) + { + ext.width=1920; + ext.height=1080; + } limit_count=(ext.width/height)*(ext.height/height); //按全屏幕放满不一样的字符为上限 } diff --git a/src/Work/WorkManager.cpp b/src/Work/WorkManager.cpp index 6d787378..423caf0b 100644 --- a/src/Work/WorkManager.cpp +++ b/src/Work/WorkManager.cpp @@ -32,7 +32,9 @@ namespace hgl VkExtent2D ext={w,h}; - cur_work_object->OnRenderTargetSwitch(render_framework,render_framework->GetSwapchainRenderTarget()); + graph::IRenderTarget *rt=render_framework->GetSwapchainRenderTarget(); + + cur_work_object->OnRenderTargetSwitch(render_framework,rt); cur_work_object->OnResize(ext); } diff --git a/src/Work/WorkObject.cpp b/src/Work/WorkObject.cpp index fd2f28f2..48ce9fa0 100644 --- a/src/Work/WorkObject.cpp +++ b/src/Work/WorkObject.cpp @@ -19,7 +19,22 @@ namespace hgl void WorkObject::OnRenderTargetSwitch(graph::RenderFramework *rf,graph::IRenderTarget *rt) { - if(!rf||!rt)return; + if(!rf) + { + render_framework=nullptr; + db=nullptr; + } + + if(!rt) + { + cur_render_target=nullptr; + render_pass=nullptr; + } + + if(!rf||!rt) + { + return; + } render_framework=rf; cur_render_target=rt;