optimized WorkManager, fixed crash after close window.
This commit is contained in:
parent
6fdf0e1fbd
commit
a569d08269
@ -157,10 +157,10 @@ int main(int,char **)
|
|||||||
|
|
||||||
WorkManager wm(&rf);
|
WorkManager wm(&rf);
|
||||||
|
|
||||||
AutoDelete<TestApp> app=new TestApp(&rf);
|
TestApp *test=new TestApp(&rf);
|
||||||
|
|
||||||
if(!app->Init())
|
if(!test->Init())
|
||||||
return(-2);
|
return(-2);
|
||||||
|
|
||||||
wm.Start(app);
|
wm.Start(test);
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,7 @@ namespace hgl
|
|||||||
|
|
||||||
double last_update_time=0;
|
double last_update_time=0;
|
||||||
double last_render_time=0;
|
double last_render_time=0;
|
||||||
|
double cur_time=0;
|
||||||
|
|
||||||
WorkObject *cur_work_object=nullptr;
|
WorkObject *cur_work_object=nullptr;
|
||||||
|
|
||||||
@ -88,12 +89,7 @@ namespace hgl
|
|||||||
|
|
||||||
void Update(WorkObject *wo)
|
void Update(WorkObject *wo)
|
||||||
{
|
{
|
||||||
double cur_time=GetDoubleTime();
|
double delta_time=cur_time-last_update_time;
|
||||||
double delta_time;
|
|
||||||
|
|
||||||
if(wo->IsTickable())
|
|
||||||
{
|
|
||||||
delta_time=cur_time-last_update_time;
|
|
||||||
|
|
||||||
if(delta_time>=frame_time)
|
if(delta_time>=frame_time)
|
||||||
{
|
{
|
||||||
@ -102,9 +98,9 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(wo->IsRenderable())
|
void Render(WorkObject *wo)
|
||||||
{
|
{
|
||||||
delta_time=cur_time-last_render_time;
|
double delta_time=cur_time-last_render_time;
|
||||||
|
|
||||||
if(delta_time>=frame_time)
|
if(delta_time>=frame_time)
|
||||||
{
|
{
|
||||||
@ -112,19 +108,30 @@ namespace hgl
|
|||||||
wo->Render(delta_time);
|
wo->Render(delta_time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void Run()
|
void Run()
|
||||||
{
|
{
|
||||||
if(!cur_work_object)
|
if(!cur_work_object)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Window *win=render_framework->GetWindow();
|
||||||
|
graph::GPUDevice *dev=render_framework->GetDevice();
|
||||||
|
|
||||||
while(!cur_work_object->IsDestroy())
|
while(!cur_work_object->IsDestroy())
|
||||||
{
|
{
|
||||||
|
cur_time=GetDoubleTime();
|
||||||
|
|
||||||
|
if(cur_work_object->IsTickable())
|
||||||
Update(cur_work_object);
|
Update(cur_work_object);
|
||||||
|
|
||||||
render_framework->GetWindow()->Update();
|
if(win->IsVisible()&&cur_work_object->IsRenderable())
|
||||||
render_framework->GetDevice()->WaitIdle();
|
{
|
||||||
|
Render(cur_work_object);
|
||||||
|
dev->WaitIdle();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!win->Update())
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
res
2
res
@ -1 +1 @@
|
|||||||
Subproject commit 475d8ad43ceee084cd24f5d0bed59de9f6aa36fd
|
Subproject commit e1a36d78f0eead5f6bb65493432c4690637b991d
|
Loading…
x
Reference in New Issue
Block a user