improve termination sequence on windows, use patterns instead of textures as directory name
This commit is contained in:
48
src/main.cpp
48
src/main.cpp
@@ -28,6 +28,13 @@ bool keys[256];
|
||||
std::mutex gl_mutex;
|
||||
std::mutex async_mutex;
|
||||
std::thread::id gl_thread;
|
||||
|
||||
std::thread hmd_renderer;
|
||||
std::thread renderer;
|
||||
int running = -1;
|
||||
std::mutex render_mutex;
|
||||
std::condition_variable render_cv;
|
||||
|
||||
int gl_count = 0;
|
||||
std::deque<std::packaged_task<void()>> tasklist;
|
||||
std::mutex task_mutex;
|
||||
@@ -606,11 +613,9 @@ int main(int argc, char** argv)
|
||||
App::I.redraw = true;
|
||||
});
|
||||
|
||||
bool running = true;
|
||||
std::mutex render_mutex;
|
||||
std::condition_variable render_cv;
|
||||
running = 1;
|
||||
|
||||
std::thread renderer([&] {
|
||||
renderer = std::thread([&] {
|
||||
BT_SetTerminate();
|
||||
LOG("start render thread");
|
||||
const float target_fps = 10;
|
||||
@@ -621,7 +626,7 @@ int main(int argc, char** argv)
|
||||
float one_sec = 0;
|
||||
float render_timer = 0;
|
||||
float frame_timer = 0;
|
||||
while(running)
|
||||
while(running == 1)
|
||||
{
|
||||
t1 = GetTickCount();
|
||||
float dt = (float)(t1 - t0) / 1000.0f;
|
||||
@@ -707,12 +712,13 @@ int main(int argc, char** argv)
|
||||
const int diff = framerate - (t1 - t0);
|
||||
render_cv.wait_for(lock, std::chrono::milliseconds(diff));
|
||||
}
|
||||
LOG("renderer terminated");
|
||||
});
|
||||
|
||||
std::mutex hmd_render_mutex;
|
||||
std::condition_variable hmd_render_cv;
|
||||
|
||||
std::thread hmd_renderer([&] {
|
||||
hmd_renderer = std::thread([&] {
|
||||
if (!vive)
|
||||
return;
|
||||
|
||||
@@ -722,7 +728,7 @@ int main(int argc, char** argv)
|
||||
|
||||
const float target_tick_rate = 90;
|
||||
unsigned long t0 = GetTickCount();
|
||||
while (running && vive->Valid())
|
||||
while (running == 1 && vive->Valid())
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(hmd_render_mutex);
|
||||
unsigned long t1 = GetTickCount();
|
||||
@@ -747,18 +753,21 @@ int main(int argc, char** argv)
|
||||
async_lock();
|
||||
vive->Terminate();
|
||||
async_unlock();
|
||||
LOG("hmd renderer terminated");
|
||||
});
|
||||
|
||||
|
||||
MSG msg;
|
||||
LOG("start main loop");
|
||||
while (running)
|
||||
while (running == 1)
|
||||
{
|
||||
// If there any message in the queue process it
|
||||
auto present = App::I.animate || App::I.redraw ?
|
||||
PeekMessage(&msg, 0, 0, 0, PM_REMOVE) : GetMessage(&msg, 0, 0, 0);
|
||||
|
||||
running = !(msg.message == WM_QUIT/* || gl.keys[VK_ESCAPE]*/);
|
||||
if (msg.message == WM_QUIT)
|
||||
running = 0;
|
||||
|
||||
if (present)
|
||||
{
|
||||
DispatchMessage(&msg);
|
||||
@@ -768,15 +777,9 @@ int main(int argc, char** argv)
|
||||
if (!tasklist.empty())
|
||||
render_cv.notify_all();
|
||||
}
|
||||
render_cv.notify_all();
|
||||
if (renderer.joinable())
|
||||
renderer.join();
|
||||
if (hmd_renderer.joinable())
|
||||
hmd_renderer.join();
|
||||
App::I.terminate();
|
||||
// Clean up
|
||||
WacomTablet::I.terminate();
|
||||
//DestroyWindow(hWnd);
|
||||
DestroyWindow(hWnd);
|
||||
UnregisterClass(className, hInst);
|
||||
LogRemote::I.stop();
|
||||
}
|
||||
@@ -793,8 +796,19 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case WM_DESTROY:
|
||||
if (running != -1)
|
||||
{
|
||||
running = 0;
|
||||
render_cv.notify_all();
|
||||
if (renderer.joinable())
|
||||
renderer.join();
|
||||
if (hmd_renderer.joinable())
|
||||
hmd_renderer.join();
|
||||
App::I.terminate();
|
||||
}
|
||||
break;
|
||||
case WM_USER_CLOSE:
|
||||
DestroyWindow(hWnd);
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
case WM_PAINT:
|
||||
|
||||
Reference in New Issue
Block a user