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);
|
||||
|
||||
AutoDelete<TestApp> app=new TestApp(&rf);
|
||||
TestApp *test=new TestApp(&rf);
|
||||
|
||||
if(!app->Init())
|
||||
if(!test->Init())
|
||||
return(-2);
|
||||
|
||||
wm.Start(app);
|
||||
wm.Start(test);
|
||||
}
|
||||
|
@ -65,6 +65,7 @@ namespace hgl
|
||||
|
||||
double last_update_time=0;
|
||||
double last_render_time=0;
|
||||
double cur_time=0;
|
||||
|
||||
WorkObject *cur_work_object=nullptr;
|
||||
|
||||
@ -88,29 +89,23 @@ namespace hgl
|
||||
|
||||
void Update(WorkObject *wo)
|
||||
{
|
||||
double cur_time=GetDoubleTime();
|
||||
double delta_time;
|
||||
double delta_time=cur_time-last_update_time;
|
||||
|
||||
if(wo->IsTickable())
|
||||
if(delta_time>=frame_time)
|
||||
{
|
||||
delta_time=cur_time-last_update_time;
|
||||
|
||||
if(delta_time>=frame_time)
|
||||
{
|
||||
last_update_time=cur_time;
|
||||
wo->Tick(delta_time);
|
||||
}
|
||||
last_update_time=cur_time;
|
||||
wo->Tick(delta_time);
|
||||
}
|
||||
}
|
||||
|
||||
if(wo->IsRenderable())
|
||||
void Render(WorkObject *wo)
|
||||
{
|
||||
double delta_time=cur_time-last_render_time;
|
||||
|
||||
if(delta_time>=frame_time)
|
||||
{
|
||||
delta_time=cur_time-last_render_time;
|
||||
|
||||
if(delta_time>=frame_time)
|
||||
{
|
||||
last_render_time=cur_time;
|
||||
wo->Render(delta_time);
|
||||
}
|
||||
last_render_time=cur_time;
|
||||
wo->Render(delta_time);
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,12 +114,24 @@ namespace hgl
|
||||
if(!cur_work_object)
|
||||
return;
|
||||
|
||||
Window *win=render_framework->GetWindow();
|
||||
graph::GPUDevice *dev=render_framework->GetDevice();
|
||||
|
||||
while(!cur_work_object->IsDestroy())
|
||||
{
|
||||
Update(cur_work_object);
|
||||
cur_time=GetDoubleTime();
|
||||
|
||||
render_framework->GetWindow()->Update();
|
||||
render_framework->GetDevice()->WaitIdle();
|
||||
if(cur_work_object->IsTickable())
|
||||
Update(cur_work_object);
|
||||
|
||||
if(win->IsVisible()&&cur_work_object->IsRenderable())
|
||||
{
|
||||
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