fixed a bug that crash after window resize. because WorkObject::cur_render_target don't reset after window resize.
This commit is contained in:
parent
e5a46f3ee8
commit
9f0625ed4e
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user