try to accurate software vsync
This commit is contained in:
parent
cc79a85e3d
commit
f9aa6acb7a
@ -321,18 +321,8 @@ mfb_wait_sync(struct mfb_window *window) {
|
||||
double current;
|
||||
uint32_t millis = 1;
|
||||
while(1) {
|
||||
event = [NSApp nextEventMatchingMask:NSEventMaskAny untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES];
|
||||
if (event) {
|
||||
[NSApp sendEvent:event];
|
||||
}
|
||||
|
||||
if(window_data->close) {
|
||||
destroy_window_data(window_data);
|
||||
return false;
|
||||
}
|
||||
|
||||
current = mfb_timer_now(window_data_osx->timer);
|
||||
if (current >= g_time_for_frame) {
|
||||
if (current >= g_time_for_frame * 0.96) {
|
||||
mfb_timer_reset(window_data_osx->timer);
|
||||
return true;
|
||||
}
|
||||
@ -342,6 +332,18 @@ mfb_wait_sync(struct mfb_window *window) {
|
||||
|
||||
usleep(millis * 1000);
|
||||
//sched_yield();
|
||||
|
||||
if(millis == 1) {
|
||||
event = [NSApp nextEventMatchingMask:NSEventMaskAny untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES];
|
||||
if (event) {
|
||||
[NSApp sendEvent:event];
|
||||
|
||||
if(window_data->close) {
|
||||
destroy_window_data(window_data);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -817,17 +817,8 @@ mfb_wait_sync(struct mfb_window *window) {
|
||||
double current;
|
||||
uint32_t millis = 1;
|
||||
while(1) {
|
||||
if (wl_display_dispatch_pending(window_data_way->display) == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(window_data->close) {
|
||||
destroy_window_data(window_data);
|
||||
return false;
|
||||
}
|
||||
|
||||
current = mfb_timer_now(window_data_way->timer);
|
||||
if (current >= g_time_for_frame) {
|
||||
if (current >= g_time_for_frame * 0.96) {
|
||||
mfb_timer_reset(window_data_way->timer);
|
||||
return true;
|
||||
}
|
||||
@ -837,6 +828,17 @@ mfb_wait_sync(struct mfb_window *window) {
|
||||
|
||||
usleep(millis * 1000);
|
||||
//sched_yield();
|
||||
|
||||
if(millis == 1) {
|
||||
if (wl_display_dispatch_pending(window_data_way->display) == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(window_data->close) {
|
||||
destroy_window_data(window_data);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -666,18 +666,8 @@ mfb_wait_sync(struct mfb_window *window) {
|
||||
double current;
|
||||
uint32_t millis = 1;
|
||||
while (1) {
|
||||
if(PeekMessage(&msg, window_data_win->window, 0, 0, PM_REMOVE)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
if (window_data->close) {
|
||||
destroy_window_data(window_data);
|
||||
return false;
|
||||
}
|
||||
|
||||
current = mfb_timer_now(window_data_win->timer);;
|
||||
if (current >= g_time_for_frame) {
|
||||
current = mfb_timer_now(window_data_win->timer);
|
||||
if (current >= g_time_for_frame * 0.96) {
|
||||
mfb_timer_reset(window_data_win->timer);
|
||||
return true;
|
||||
}
|
||||
@ -686,6 +676,16 @@ mfb_wait_sync(struct mfb_window *window) {
|
||||
}
|
||||
|
||||
Sleep(millis);
|
||||
|
||||
if(millis == 1 && PeekMessage(&msg, window_data_win->window, 0, 0, PM_REMOVE)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
|
||||
if (window_data->close) {
|
||||
destroy_window_data(window_data);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -452,18 +452,8 @@ mfb_wait_sync(struct mfb_window *window) {
|
||||
double current;
|
||||
uint32_t millis = 1;
|
||||
while(1) {
|
||||
if(XEventsQueued(window_data_x11->display, QueuedAlready) > 0) {
|
||||
XNextEvent(window_data_x11->display, &event);
|
||||
processEvent(window_data, &event);
|
||||
}
|
||||
|
||||
if(window_data->close) {
|
||||
destroy_window_data(window_data);
|
||||
return false;
|
||||
}
|
||||
|
||||
current = mfb_timer_now(window_data_x11->timer);
|
||||
if (current >= g_time_for_frame) {
|
||||
if (current >= g_time_for_frame * 0.96) {
|
||||
mfb_timer_reset(window_data_x11->timer);
|
||||
return true;
|
||||
}
|
||||
@ -473,6 +463,16 @@ mfb_wait_sync(struct mfb_window *window) {
|
||||
|
||||
usleep(millis * 1000);
|
||||
//sched_yield();
|
||||
|
||||
if(millis == 1 && XEventsQueued(window_data_x11->display, QueuedAlready) > 0) {
|
||||
XNextEvent(window_data_x11->display, &event);
|
||||
processEvent(window_data, &event);
|
||||
|
||||
if(window_data->close) {
|
||||
destroy_window_data(window_data);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user