|
@@ -75,7 +75,6 @@ struct Window::Internal { |
|
|
std::string lastWindowTitle; |
|
|
std::string lastWindowTitle; |
|
|
|
|
|
|
|
|
int frame = 0; |
|
|
int frame = 0; |
|
|
bool ignoreNextMouseDelta = false; |
|
|
|
|
|
int frameSwapInterval = 1; |
|
|
int frameSwapInterval = 1; |
|
|
double monitorRefreshRate = 60.0; // FIXME |
|
|
double monitorRefreshRate = 60.0; // FIXME |
|
|
double frameTime = 0.0; |
|
|
double frameTime = 0.0; |
|
@@ -150,19 +149,12 @@ void Window::step() { |
|
|
internal->frameTime = frameTime; |
|
|
internal->frameTime = frameTime; |
|
|
internal->lastFrameDuration = frameTime - lastFrameTime; |
|
|
internal->lastFrameDuration = frameTime - lastFrameTime; |
|
|
// DEBUG("%.2lf Hz", 1.0 / internal->lastFrameDuration); |
|
|
// DEBUG("%.2lf Hz", 1.0 / internal->lastFrameDuration); |
|
|
double t1 = 0.0, t2 = 0.0, t3 = 0.0, t4 = 0.0, t5 = 0.0; |
|
|
|
|
|
|
|
|
|
|
|
// Make event handlers and step() have a clean NanoVG context |
|
|
// Make event handlers and step() have a clean NanoVG context |
|
|
// nvgReset(vg); |
|
|
// nvgReset(vg); |
|
|
|
|
|
|
|
|
bndSetFont(uiFont->handle); |
|
|
bndSetFont(uiFont->handle); |
|
|
|
|
|
|
|
|
// Poll events |
|
|
|
|
|
// Save and restore context because event handler set their own context based on which window they originate from. |
|
|
|
|
|
// Context* context = contextGet(); |
|
|
|
|
|
// glfwPollEvents(); |
|
|
|
|
|
// contextSet(context); |
|
|
|
|
|
|
|
|
|
|
|
// Set window title |
|
|
// Set window title |
|
|
std::string windowTitle = APP_NAME + " " + APP_EDITION_NAME + " " + APP_VERSION; |
|
|
std::string windowTitle = APP_NAME + " " + APP_EDITION_NAME + " " + APP_VERSION; |
|
|
if (APP->patch->path != "") { |
|
|
if (APP->patch->path != "") { |
|
@@ -189,7 +181,6 @@ void Window::step() { |
|
|
int fbWidth = winWidth;// * newPixelRatio; |
|
|
int fbWidth = winWidth;// * newPixelRatio; |
|
|
int fbHeight = winHeight;// * newPixelRatio; |
|
|
int fbHeight = winHeight;// * newPixelRatio; |
|
|
windowRatio = (float)fbWidth / winWidth; |
|
|
windowRatio = (float)fbWidth / winWidth; |
|
|
t1 = system::getTime(); |
|
|
|
|
|
|
|
|
|
|
|
if (APP->scene) { |
|
|
if (APP->scene) { |
|
|
// DEBUG("%f %f %d %d", pixelRatio, windowRatio, fbWidth, winWidth); |
|
|
// DEBUG("%f %f %d %d", pixelRatio, windowRatio, fbWidth, winWidth); |
|
@@ -198,40 +189,22 @@ void Window::step() { |
|
|
|
|
|
|
|
|
// Step scene |
|
|
// Step scene |
|
|
APP->scene->step(); |
|
|
APP->scene->step(); |
|
|
t2 = system::getTime(); |
|
|
|
|
|
|
|
|
|
|
|
// Render scene |
|
|
// Render scene |
|
|
bool visible = true; |
|
|
|
|
|
if (visible) { |
|
|
|
|
|
// Update and render |
|
|
|
|
|
// nvgBeginFrame(vg, fbWidth, fbHeight, pixelRatio); |
|
|
|
|
|
nvgScale(vg, pixelRatio, pixelRatio); |
|
|
|
|
|
|
|
|
|
|
|
// Draw scene |
|
|
|
|
|
widget::Widget::DrawArgs args; |
|
|
|
|
|
args.vg = vg; |
|
|
|
|
|
args.clipBox = APP->scene->box.zeroPos(); |
|
|
|
|
|
APP->scene->draw(args); |
|
|
|
|
|
t3 = system::getTime(); |
|
|
|
|
|
|
|
|
|
|
|
glViewport(0, 0, fbWidth, fbHeight); |
|
|
|
|
|
glClearColor(0.0, 0.0, 0.0, 1.0); |
|
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); |
|
|
|
|
|
// nvgEndFrame(vg); |
|
|
|
|
|
t4 = system::getTime(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// Update and render |
|
|
|
|
|
nvgScale(vg, pixelRatio, pixelRatio); |
|
|
|
|
|
|
|
|
|
|
|
// Draw scene |
|
|
|
|
|
widget::Widget::DrawArgs args; |
|
|
|
|
|
args.vg = vg; |
|
|
|
|
|
args.clipBox = APP->scene->box.zeroPos(); |
|
|
|
|
|
APP->scene->draw(args); |
|
|
|
|
|
|
|
|
|
|
|
glViewport(0, 0, fbWidth, fbHeight); |
|
|
|
|
|
glClearColor(0.0, 0.0, 0.0, 1.0); |
|
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
t5 = system::getTime(); |
|
|
|
|
|
|
|
|
|
|
|
// DEBUG("pre-step %6.1f step %6.1f draw %6.1f nvgEndFrame %6.1f glfwSwapBuffers %6.1f total %6.1f", |
|
|
|
|
|
// (t1 - frameTime) * 1e3f, |
|
|
|
|
|
// (t2 - t1) * 1e3f, |
|
|
|
|
|
// (t3 - t2) * 1e3f, |
|
|
|
|
|
// (t4 - t2) * 1e3f, |
|
|
|
|
|
// (t5 - t4) * 1e3f, |
|
|
|
|
|
// (t5 - frameTime) * 1e3f |
|
|
|
|
|
// ); |
|
|
|
|
|
internal->frame++; |
|
|
internal->frame++; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -250,23 +223,15 @@ void Window::close() { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Window::cursorLock() { |
|
|
void Window::cursorLock() { |
|
|
if (!settings::allowCursorLock) |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
internal->ignoreNextMouseDelta = true; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Window::cursorUnlock() { |
|
|
void Window::cursorUnlock() { |
|
|
if (!settings::allowCursorLock) |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
internal->ignoreNextMouseDelta = true; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool Window::isCursorLocked() { |
|
|
bool Window::isCursorLocked() { |
|
|
return internal->ignoreNextMouseDelta; |
|
|
|
|
|
|
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|