fixed a bug that crash after window resize. because WorkObject::cur_render_target don't reset after window resize.

This commit is contained in:
hyzboy 2025-02-05 23:36:53 +08:00
parent e5a46f3ee8
commit 9f0625ed4e
4 changed files with 36 additions and 6 deletions

View File

@ -1,13 +1,16 @@
#pragma once
#include"WorkObject.h"
#include<hgl/WorkObject.h>
namespace hgl
{
/**
* WorkObject<br>
*/
class WorkManager
class WorkManager:public io::WindowEvent
{
protected:
graph::RenderFramework *render_framework;
uint fps=60;
@ -41,6 +44,15 @@ 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
@ -53,17 +65,24 @@ namespace hgl
SwapchainWorkManager(graph::RenderFramework *rf):WorkManager(rf)
{
swpachain_module=rf->GetSwapchainModule();
rf->GetWindow()->Join(this);
}
~SwapchainWorkManager()
{
render_framework->GetWindow()->Unjoin(this);
}
~SwapchainWorkManager()=default;
void Render(WorkObject *wo) override;
void OnResize(uint w,uint h) override;
};
template<typename WO> int RunFramework(const OSString &title,uint width=1280,uint height=720)
{
graph::RenderFramework rf(title);
if(!rf.Init(width,height))
if(!rf.Init(width,height))
return(-1);
SwapchainWorkManager wm(&rf);

View File

@ -56,6 +56,8 @@ namespace hgl
virtual ~WorkObject()=default;
virtual void OnRenderTargetSwitch(graph::RenderFramework *rf,graph::IRenderTarget *rt);
virtual void OnResize(const VkExtent2D &){}
virtual void Render(double delta_time,graph::RenderCmdBuffer *cmd)=0;

View File

@ -26,6 +26,16 @@ namespace hgl
}
}
void SwapchainWorkManager::OnResize(uint w,uint h)
{
if(!cur_work_object)return;
VkExtent2D ext={w,h};
cur_work_object->OnRenderTargetSwitch(render_framework,render_framework->GetSwapchainRenderTarget());
cur_work_object->OnResize(ext);
}
void SwapchainWorkManager::Render(WorkObject *wo)
{
graph::IRenderTarget *rt=swpachain_module->AcquireNextImage();

View File

@ -19,8 +19,7 @@ namespace hgl
void WorkObject::OnRenderTargetSwitch(graph::RenderFramework *rf,graph::IRenderTarget *rt)
{
if(!rf)return;
if(render_framework==rf)return;
if(!rf||!rt)return;
render_framework=rf;
cur_render_target=rt;