Showing the changes to interface/src/Application.cpp (1 of 4 files). Show all
Unified · Split
| @@ -107,8 +107,6 @@ static unsigned STARFIELD_SEED = 1; · 106 unmodified lines | ||
| 107 | 107 | |
| 108 | 108 | static const int BANDWIDTH_METER_CLICK_MAX_DRAG_LENGTH = 6; // farther dragged clicks are ignored |
| 109 | 109 | |
| 110 | −const int IDLE_SIMULATE_MSECS = 16; // How often should call simulate and other stuff | |
| 111 | − // in the idle loop? (60 FPS is default) | |
| 112 | 110 | static QTimer* idleTimer = NULL; |
| 113 | 111 | |
| 114 | 112 | const QString CHECK_VERSION_URL = "https://highfidelity.io/latestVersion.xml"; |
| @@ -182,9 +180,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 67 unmodified lines | ||
| 182 | 180 | _trayIcon(new QSystemTrayIcon(_window)), |
| 183 | 181 | _lastNackTime(usecTimestampNow()), |
| 184 | 182 | _lastSendDownstreamAudioStats(usecTimestampNow()), |
| 185 | − _renderTargetFramerate(0), | |
| 186 | − _isVSyncOn(true), | |
| 187 | − _renderResolutionScale(1.0f) | |
| 183 | + _isVSyncOn(true) | |
| 188 | 184 | { |
| 189 | 185 | |
| 190 | 186 | // read the ApplicationInfo.ini file for Name/Version/Domain information |
| @@ -601,7 +597,7 @@ void Application::paintGL() { · 410 unmodified lines | ||
| 601 | 597 | if (OculusManager::isConnected()) { |
| 602 | 598 | _textureCache.setFrameBufferSize(OculusManager::getRenderTargetSize()); |
| 603 | 599 | } else { |
| 604 | − QSize fbSize = _glWidget->getDeviceSize() * _renderResolutionScale; | |
| 600 | + QSize fbSize = _glWidget->getDeviceSize() * getRenderResolutionScale(); | |
| 605 | 601 | _textureCache.setFrameBufferSize(fbSize); |
| 606 | 602 | } |
| 607 | 603 | |
| @@ -1471,12 +1467,11 @@ void Application::idle() { · 863 unmodified lines | ||
| 1471 | 1467 | bool showWarnings = getLogger()->extraDebugging(); |
| 1472 | 1468 | PerformanceWarning warn(showWarnings, "idle()"); |
| 1473 | 1469 | |
| 1474 | − // Only run simulation code if more than IDLE_SIMULATE_MSECS have passed since last time we ran | |
| 1470 | + // Only run simulation code if more than the targetFramePeriod have passed since last time we ran | |
| 1475 | 1471 | double targetFramePeriod = 0.0; |
| 1476 | − if (_renderTargetFramerate > 0) { | |
| 1477 | − targetFramePeriod = 1000.0 / _renderTargetFramerate; | |
| 1478 | − } else if (_renderTargetFramerate < 0) { | |
| 1479 | − targetFramePeriod = IDLE_SIMULATE_MSECS; | |
| 1472 | + unsigned int targetFramerate = getRenderTargetFramerate(); | |
| 1473 | + if (targetFramerate > 0) { | |
| 1474 | + targetFramePeriod = 1000.0 / targetFramerate; | |
| 1480 | 1475 | } |
| 1481 | 1476 | double timeSinceLastUpdate = (double)_lastTimeUpdated.nsecsElapsed() / 1000000.0; |
| 1482 | 1477 | if (timeSinceLastUpdate > targetFramePeriod) { |
| @@ -3176,7 +3171,7 @@ void Application::renderRearViewMirror(const QRect& region, bool billboard) { · 1693 unmodified lines | ||
| 3176 | 3171 | } else { |
| 3177 | 3172 | // if not rendering the billboard, the region is in device independent coordinates; must convert to device |
| 3178 | 3173 | QSize size = getTextureCache()->getFrameBufferSize(); |
| 3179 | − float ratio = QApplication::desktop()->windowHandle()->devicePixelRatio() * _renderResolutionScale; | |
| 3174 | + float ratio = QApplication::desktop()->windowHandle()->devicePixelRatio() * getRenderResolutionScale(); | |
| 3180 | 3175 | int x = region.x() * ratio, y = region.y() * ratio, width = region.width() * ratio, height = region.height() * ratio; |
| 3181 | 3176 | glViewport(x, size.height() - y - height, width, height); |
| 3182 | 3177 | glScissor(x, size.height() - y - height, width, height); |
| @@ -4234,13 +4229,11 @@ void Application::takeSnapshot() { · 1051 unmodified lines | ||
| 4234 | 4229 | _snapshotShareDialog->show(); |
| 4235 | 4230 | } |
| 4236 | 4231 | |
| 4237 | −void Application::setRenderTargetFramerate(unsigned int framerate, bool vsyncOn) { | |
| 4238 | − if (vsyncOn != _isVSyncOn) { | |
| 4232 | +void Application::setVSyncEnabled(bool vsyncOn) { | |
| 4239 | 4233 | #if defined(Q_OS_WIN) |
| 4240 | 4234 | if (wglewGetExtension("WGL_EXT_swap_control")) { |
| 4241 | 4235 | wglSwapIntervalEXT(vsyncOn); |
| 4242 | 4236 | int swapInterval = wglGetSwapIntervalEXT(); |
| 4243 | − _isVSyncOn = swapInterval; | |
| 4244 | 4237 | qDebug("V-Sync is %s\n", (swapInterval > 0 ? "ON" : "OFF")); |
| 4245 | 4238 | } else { |
| 4246 | 4239 | qDebug("V-Sync is FORCED ON on this system\n"); |
| @@ -4260,11 +4253,32 @@ void Application::setRenderTargetFramerate(unsigned int framerate, bool vsyncOn) · 13 unmodified lines | ||
| 4260 | 4253 | #else |
| 4261 | 4254 | qDebug("V-Sync is FORCED ON on this system\n"); |
| 4262 | 4255 | #endif |
| 4256 | +} | |
| 4257 | + | |
| 4258 | +bool Application::isVSyncOn() const { | |
| 4259 | +#if defined(Q_OS_WIN) | |
| 4260 | + if (wglewGetExtension("WGL_EXT_swap_control")) { | |
| 4261 | + int swapInterval = wglGetSwapIntervalEXT(); | |
| 4262 | + return (swapInterval > 0); | |
| 4263 | + } else { | |
| 4264 | + return true; | |
| 4263 | 4265 | } |
| 4264 | − _renderTargetFramerate = framerate; | |
| 4266 | +#elif defined(Q_OS_LINUX) | |
| 4267 | + // TODO: write the poper code for linux | |
| 4268 | + /* | |
| 4269 | + if (glQueryExtension.... ("GLX_EXT_swap_control")) { | |
| 4270 | + int swapInterval = xglGetSwapIntervalEXT(); | |
| 4271 | + return (swapInterval > 0); | |
| 4272 | + } else { | |
| 4273 | + return true; | |
| 4274 | + } | |
| 4275 | + */ | |
| 4276 | +#else | |
| 4277 | + return true; | |
| 4278 | +#endif | |
| 4265 | 4279 | } |
| 4266 | 4280 | |
| 4267 | −bool Application::isVSyncEditable() { | |
| 4281 | +bool Application::isVSyncEditable() const { | |
| 4268 | 4282 | #if defined(Q_OS_WIN) |
| 4269 | 4283 | if (wglewGetExtension("WGL_EXT_swap_control")) { |
| 4270 | 4284 | return true; |
| @@ -4281,6 +4295,43 @@ bool Application::isVSyncEditable() { · 10 unmodified lines | ||
| 4281 | 4295 | return false; |
| 4282 | 4296 | } |
| 4283 | 4297 | |
| 4284 | −void Application::setRenderResolutionScale(float scale) { | |
| 4285 | − _renderResolutionScale = scale; | |
| 4298 | +unsigned int Application::getRenderTargetFramerate() const { | |
| 4299 | + if (Menu::getInstance()->isOptionChecked(MenuOption::RenderTargetFramerateUnlimited)) { | |
| 4300 | + return 0; | |
| 4301 | + } | |
| 4302 | + else if (Menu::getInstance()->isOptionChecked(MenuOption::RenderTargetFramerate60)) { | |
| 4303 | + return 60; | |
| 4304 | + } | |
| 4305 | + else if (Menu::getInstance()->isOptionChecked(MenuOption::RenderTargetFramerate50)) { | |
| 4306 | + return 50; | |
| 4307 | + } | |
| 4308 | + else if (Menu::getInstance()->isOptionChecked(MenuOption::RenderTargetFramerate40)) { | |
| 4309 | + return 40; | |
| 4310 | + } | |
| 4311 | + else if (Menu::getInstance()->isOptionChecked(MenuOption::RenderTargetFramerate30)) { | |
| 4312 | + return 30; | |
| 4313 | + } | |
| 4314 | + return 0; | |
| 4286 | 4315 | } |
| 4316 | + | |
| 4317 | +float Application::getRenderResolutionScale() const { | |
| 4318 | + | |
| 4319 | + if (Menu::getInstance()->isOptionChecked(MenuOption::RenderResolutionOne)) { | |
| 4320 | + return 1.f; | |
| 4321 | + } | |
| 4322 | + else if (Menu::getInstance()->isOptionChecked(MenuOption::RenderResolutionTwoThird)) { | |
| 4323 | + return 0.666f; | |
| 4324 | + } | |
| 4325 | + else if (Menu::getInstance()->isOptionChecked(MenuOption::RenderResolutionHalf)) { | |
| 4326 | + return 0.5f; | |
| 4327 | + } | |
| 4328 | + else if (Menu::getInstance()->isOptionChecked(MenuOption::RenderResolutionThird)) { | |
| 4329 | + return 0.333f; | |
| 4330 | + } | |
| 4331 | + else if (Menu::getInstance()->isOptionChecked(MenuOption::RenderResolutionQuarter)) { | |
| 4332 | + return 0.25f; | |
| 4333 | + } | |
| 4334 | + else { | |
| 4335 | + return 1.f; | |
| 4336 | + } | |
| 4337 | +} | |