From a34e6773a94e988eea29ee25455c2a86611732bc Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 24 Mar 2016 15:13:38 -0700 Subject: [PATCH 1/4] Add messageBox for no gl support --- libraries/gl/src/gl/OpenGLVersionChecker.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libraries/gl/src/gl/OpenGLVersionChecker.cpp b/libraries/gl/src/gl/OpenGLVersionChecker.cpp index 761c27a302..2e6d974b65 100644 --- a/libraries/gl/src/gl/OpenGLVersionChecker.cpp +++ b/libraries/gl/src/gl/OpenGLVersionChecker.cpp @@ -25,8 +25,22 @@ OpenGLVersionChecker::OpenGLVersionChecker(int& argc, char** argv) : bool OpenGLVersionChecker::isValidVersion() { bool valid = true; - // Retrieve OpenGL version GLWidget* glWidget = new GLWidget(); + valid = glWidget->isValid(); + // Inform user if no OpenGL support + if (!valid) { + QMessageBox messageBox; + messageBox.setWindowTitle("Missing OpenGL Support"); + messageBox.setIcon(QMessageBox::Warning); + messageBox.setText(QString().sprintf("Your system does not support OpenGL, Interface cannot run.")); + messageBox.setInformativeText("Press OK to exit."); + messageBox.setStandardButtons(QMessageBox::Ok); + messageBox.setDefaultButton(QMessageBox::Ok); + messageBox.exec(); + return false; + } + + // Retrieve OpenGL version glWidget->initializeGL(); QString glVersion = QString((const char*)glGetString(GL_VERSION)); delete glWidget; From 1405daa4ee8a4d9420e3bce2e0598387ae65bda7 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 24 Mar 2016 15:14:00 -0700 Subject: [PATCH 2/4] Add guards when checking vsync --- libraries/gl/src/gl/GLWidget.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/gl/src/gl/GLWidget.cpp b/libraries/gl/src/gl/GLWidget.cpp index c67dec1e51..f113be1cfb 100644 --- a/libraries/gl/src/gl/GLWidget.cpp +++ b/libraries/gl/src/gl/GLWidget.cpp @@ -50,7 +50,9 @@ void GLWidget::initializeGL() { // TODO: write the proper code for linux makeCurrent(); #if defined(Q_OS_WIN) - _vsyncSupported = context()->contextHandle()->hasExtension("WGL_EXT_swap_control");; + if (isValid() && context() && context()->contextHandle()) { + _vsyncSupported = context()->contextHandle()->hasExtension("WGL_EXT_swap_control");; + } #endif } From b252139704506519d5716a2403c4f9fbc1925337 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Fri, 25 Mar 2016 14:10:11 -0700 Subject: [PATCH 3/4] LMK when running with old GL version --- interface/src/main.cpp | 21 ++++++++++++++++--- libraries/gl/src/gl/OpenGLVersionChecker.cpp | 11 +++++----- libraries/gl/src/gl/OpenGLVersionChecker.h | 2 +- .../networking/src/UserActivityLogger.cpp | 9 ++++++++ libraries/networking/src/UserActivityLogger.h | 2 ++ 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 6db53de0d8..074afa16ea 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -23,6 +23,7 @@ #include "AddressManager.h" #include "Application.h" #include "InterfaceLogging.h" +#include "UserActivityLogger.h" #include "MainWindow.h" #ifdef HAS_BUGSPLAT @@ -102,11 +103,19 @@ int main(int argc, const char* argv[]) { // Check OpenGL version. // This is done separately from the main Application so that start-up and shut-down logic within the main Application is // not made more complicated than it already is. + bool override = false; + QString glVersion; { OpenGLVersionChecker openGLVersionChecker(argc, const_cast(argv)); - if (!openGLVersionChecker.isValidVersion()) { - qCDebug(interfaceapp, "Early exit due to OpenGL version."); - return 0; + bool valid = true; + glVersion = openGLVersionChecker.checkVersion(valid, override); + if (!valid) { + if (override) { + qCDebug(interfaceapp, "Running on insufficient OpenGL version: %s.", glVersion.toStdString().c_str()); + } else { + qCDebug(interfaceapp, "Early exit due to OpenGL version."); + return 0; + } } } @@ -134,6 +143,12 @@ int main(int argc, const char* argv[]) { QSettings::setDefaultFormat(QSettings::IniFormat); Application app(argc, const_cast(argv), startupTime); + // If we failed the OpenGLVersion check, log it. + // This needed to wait until the Application ctor for credentials. + if (override) { + UserActivityLogger::getInstance().insufficientGLVersion(glVersion); + } + // Setup local server QLocalServer server { &app }; diff --git a/libraries/gl/src/gl/OpenGLVersionChecker.cpp b/libraries/gl/src/gl/OpenGLVersionChecker.cpp index 2e6d974b65..9a8c9f7a20 100644 --- a/libraries/gl/src/gl/OpenGLVersionChecker.cpp +++ b/libraries/gl/src/gl/OpenGLVersionChecker.cpp @@ -22,8 +22,9 @@ OpenGLVersionChecker::OpenGLVersionChecker(int& argc, char** argv) : { } -bool OpenGLVersionChecker::isValidVersion() { - bool valid = true; +QString OpenGLVersionChecker::checkVersion(bool& valid, bool& override) { + valid = true; + override = false; GLWidget* glWidget = new GLWidget(); valid = glWidget->isValid(); @@ -37,7 +38,7 @@ bool OpenGLVersionChecker::isValidVersion() { messageBox.setStandardButtons(QMessageBox::Ok); messageBox.setDefaultButton(QMessageBox::Ok); messageBox.exec(); - return false; + return QString(); } // Retrieve OpenGL version @@ -68,8 +69,8 @@ bool OpenGLVersionChecker::isValidVersion() { messageBox.setInformativeText("Press OK to exit; Ignore to continue."); messageBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Ignore); messageBox.setDefaultButton(QMessageBox::Ok); - valid = messageBox.exec() == QMessageBox::Ignore; + override = messageBox.exec() == QMessageBox::Ignore; } - return valid; + return glVersion; } diff --git a/libraries/gl/src/gl/OpenGLVersionChecker.h b/libraries/gl/src/gl/OpenGLVersionChecker.h index 3e16c3a32d..1e45052626 100644 --- a/libraries/gl/src/gl/OpenGLVersionChecker.h +++ b/libraries/gl/src/gl/OpenGLVersionChecker.h @@ -19,7 +19,7 @@ class OpenGLVersionChecker : public QApplication { public: OpenGLVersionChecker(int& argc, char** argv); - static bool isValidVersion(); + static QString checkVersion(bool& valid, bool& override); }; #endif // hifi_OpenGLVersionChecker_h diff --git a/libraries/networking/src/UserActivityLogger.cpp b/libraries/networking/src/UserActivityLogger.cpp index 2e74a5166c..76c628ff22 100644 --- a/libraries/networking/src/UserActivityLogger.cpp +++ b/libraries/networking/src/UserActivityLogger.cpp @@ -91,6 +91,15 @@ void UserActivityLogger::launch(QString applicationVersion, bool previousSession logAction(ACTION_NAME, actionDetails); } +void UserActivityLogger::insufficientGLVersion(QString glVersion) { + const QString ACTION_NAME = "insufficient_gl"; + QJsonObject actionDetails; + QString GL_VERSION = "glVersion"; + actionDetails.insert(GL_VERSION, glVersion); + + logAction(ACTION_NAME, actionDetails); +} + void UserActivityLogger::changedDisplayName(QString displayName) { const QString ACTION_NAME = "changed_display_name"; QJsonObject actionDetails; diff --git a/libraries/networking/src/UserActivityLogger.h b/libraries/networking/src/UserActivityLogger.h index 8eda086521..4681e0ea61 100644 --- a/libraries/networking/src/UserActivityLogger.h +++ b/libraries/networking/src/UserActivityLogger.h @@ -30,6 +30,8 @@ public slots: void logAction(QString action, QJsonObject details = QJsonObject(), JSONCallbackParameters params = JSONCallbackParameters()); void launch(QString applicationVersion, bool previousSessionCrashed, int previousSessionRuntime); + + void insufficientGLVersion(QString glVersion); void changedDisplayName(QString displayName); void changedModel(QString typeOfModel, QString modelURL); From 9f8848e8337925c9bfa4076823fdde2b1513e992 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Fri, 25 Mar 2016 15:07:14 -0700 Subject: [PATCH 4/4] Log on first login --- interface/src/main.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 074afa16ea..e67f95e2e3 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -144,9 +144,19 @@ int main(int argc, const char* argv[]) { Application app(argc, const_cast(argv), startupTime); // If we failed the OpenGLVersion check, log it. - // This needed to wait until the Application ctor for credentials. if (override) { - UserActivityLogger::getInstance().insufficientGLVersion(glVersion); + auto& accountManager = AccountManager::getInstance(); + if (accountManager.isLoggedIn()) { + UserActivityLogger::getInstance().insufficientGLVersion(glVersion); + } else { + QObject::connect(&AccountManager::getInstance(), &AccountManager::loginComplete, [glVersion](){ + static bool loggedInsufficientGL = false; + if (!loggedInsufficientGL) { + UserActivityLogger::getInstance().insufficientGLVersion(glVersion); + loggedInsufficientGL = true; + } + }); + } } // Setup local server