@@ -18,7 +18,6 @@ struct Scene : widget::OpaqueWidget { | |||||
RackWidget* rack; | RackWidget* rack; | ||||
widget::Widget* menuBar; | widget::Widget* menuBar; | ||||
widget::Widget* moduleBrowser; | widget::Widget* moduleBrowser; | ||||
widget::Widget* frameRateWidget; | |||||
double lastAutosaveTime = 0.0; | double lastAutosaveTime = 0.0; | ||||
/** The last mouse position in the Scene */ | /** The last mouse position in the Scene */ | ||||
@@ -1068,6 +1068,7 @@ struct MeterLabel : ui::Label { | |||||
void step() override { | void step() override { | ||||
double meterAverage = APP->engine->getMeterAverage(); | double meterAverage = APP->engine->getMeterAverage(); | ||||
double meterMax = APP->engine->getMeterMax(); | double meterMax = APP->engine->getMeterMax(); | ||||
// double frameRate = 1.0 / APP->window->getLastFrameDuration(); | |||||
text = string::f("%.1f%% avg / %.1f%% max", meterAverage * 100, meterMax * 100); | text = string::f("%.1f%% avg / %.1f%% max", meterAverage * 100, meterMax * 100); | ||||
Label::step(); | Label::step(); | ||||
} | } | ||||
@@ -1117,7 +1118,7 @@ struct MenuBar : widget::OpaqueWidget { | |||||
meterLabel = new MeterLabel; | meterLabel = new MeterLabel; | ||||
meterLabel->box.pos.y = margin; | meterLabel->box.pos.y = margin; | ||||
meterLabel->box.size.x = 160; | |||||
meterLabel->box.size.x = 300; | |||||
meterLabel->alignment = ui::Label::RIGHT_ALIGNMENT; | meterLabel->alignment = ui::Label::RIGHT_ALIGNMENT; | ||||
meterLabel->color.a = 0.5; | meterLabel->color.a = 0.5; | ||||
addChild(meterLabel); | addChild(meterLabel); | ||||
@@ -19,14 +19,6 @@ namespace rack { | |||||
namespace app { | namespace app { | ||||
struct FrameRateWidget : widget::TransparentWidget { | |||||
void draw(const DrawArgs& args) override { | |||||
std::string text = string::f("%.2lf Hz", 1.0 / APP->window->getLastFrameDuration()); | |||||
bndLabel(args.vg, 0.0, 0.0, INFINITY, INFINITY, -1, text.c_str()); | |||||
} | |||||
}; | |||||
struct ResizeHandle : widget::OpaqueWidget { | struct ResizeHandle : widget::OpaqueWidget { | ||||
math::Vec size; | math::Vec size; | ||||
@@ -75,11 +67,6 @@ Scene::Scene() { | |||||
addChild(tipWindowCreate()); | addChild(tipWindowCreate()); | ||||
} | } | ||||
// frameRateWidget = new FrameRateWidget; | |||||
// frameRateWidget->box.size = math::Vec(80.0, 30.0); | |||||
// frameRateWidget->hide(); | |||||
// addChild(frameRateWidget); | |||||
internal->resizeHandle = new ResizeHandle; | internal->resizeHandle = new ResizeHandle; | ||||
internal->resizeHandle->box.size = math::Vec(15, 15); | internal->resizeHandle->box.size = math::Vec(15, 15); | ||||
internal->resizeHandle->hide(); | internal->resizeHandle->hide(); | ||||
@@ -101,8 +88,6 @@ void Scene::step() { | |||||
rackScroll->box.pos.y = menuBar->box.size.y; | rackScroll->box.pos.y = menuBar->box.size.y; | ||||
} | } | ||||
// frameRateWidget->box.pos.x = box.size.x - frameRateWidget->box.size.x; | |||||
internal->resizeHandle->box.pos = box.size.minus(internal->resizeHandle->box.size); | internal->resizeHandle->box.pos = box.size.minus(internal->resizeHandle->box.size); | ||||
// Resize owned descendants | // Resize owned descendants | ||||
@@ -387,10 +387,12 @@ void Window::run() { | |||||
void Window::step() { | void Window::step() { | ||||
double frameTime = system::getTime(); | |||||
double lastFrameTime = internal->frameTime; | double lastFrameTime = internal->frameTime; | ||||
internal->frameTime = system::getTime(); | |||||
internal->lastFrameDuration = internal->frameTime - lastFrameTime; | |||||
internal->frameTime = frameTime; | |||||
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); | ||||
@@ -446,6 +448,7 @@ void Window::step() { | |||||
int winWidth, winHeight; | int winWidth, winHeight; | ||||
glfwGetWindowSize(win, &winWidth, &winHeight); | glfwGetWindowSize(win, &winWidth, &winHeight); | ||||
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); | ||||
@@ -454,6 +457,7 @@ void Window::step() { | |||||
// Step scene | // Step scene | ||||
APP->scene->step(); | APP->scene->step(); | ||||
t2 = system::getTime(); | |||||
// Render scene | // Render scene | ||||
bool visible = glfwGetWindowAttrib(win, GLFW_VISIBLE) && !glfwGetWindowAttrib(win, GLFW_ICONIFIED); | bool visible = glfwGetWindowAttrib(win, GLFW_VISIBLE) && !glfwGetWindowAttrib(win, GLFW_ICONIFIED); | ||||
@@ -467,16 +471,27 @@ void Window::step() { | |||||
args.vg = vg; | args.vg = vg; | ||||
args.clipBox = APP->scene->box.zeroPos(); | args.clipBox = APP->scene->box.zeroPos(); | ||||
APP->scene->draw(args); | APP->scene->draw(args); | ||||
t3 = system::getTime(); | |||||
glViewport(0, 0, fbWidth, fbHeight); | glViewport(0, 0, fbWidth, fbHeight); | ||||
glClearColor(0.0, 0.0, 0.0, 1.0); | glClearColor(0.0, 0.0, 0.0, 1.0); | ||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||
nvgEndFrame(vg); | nvgEndFrame(vg); | ||||
t4 = system::getTime(); | |||||
} | } | ||||
} | } | ||||
glfwSwapBuffers(win); | glfwSwapBuffers(win); | ||||
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++; | ||||
} | } | ||||