diff --git a/YACReader/YACReader.pro b/YACReader/YACReader.pro index d5ad3293..2d4aa904 100644 --- a/YACReader/YACReader.pro +++ b/YACReader/YACReader.pro @@ -113,7 +113,8 @@ HEADERS += ../common/comic.h \ yacreader_local_client.h \ ../common/http_worker.h \ ../common/exit_check.h \ - ../common/scroll_management.h + ../common/scroll_management.h \ + ../common/opengl_checker.h !CONFIG(no_opengl) { CONFIG(legacy_gl_widget) { @@ -156,7 +157,8 @@ SOURCES += ../common/comic.cpp \ ../common/http_worker.cpp \ ../common/yacreader_global.cpp \ ../common/exit_check.cpp \ - ../common/scroll_management.cpp + ../common/scroll_management.cpp \ + ../common/opengl_checker.cpp !CONFIG(no_opengl) { CONFIG(legacy_gl_widget) { diff --git a/YACReader/viewer.cpp b/YACReader/viewer.cpp index c4391e20..d0389a0a 100644 --- a/YACReader/viewer.cpp +++ b/YACReader/viewer.cpp @@ -18,6 +18,8 @@ #include "comic_db.h" #include "shortcuts_manager.h" +#include "opengl_checker.h" + #include @@ -72,10 +74,15 @@ shouldOpenPrevious(false) //CONFIG GOTO_FLOW-------------------------------------------------------- #ifndef NO_OPENGL - if(!settings->contains(USE_OPEN_GL)) - { + + OpenGLChecker openGLChecker; + bool openGLAvailable = openGLChecker.hasCompatibleOpenGLVersion(); + + if(openGLAvailable && !settings->contains(USE_OPEN_GL)) settings->setValue(USE_OPEN_GL,2); - } + else + if(!openGLAvailable) + settings->setValue(USE_OPEN_GL,0); if((settings->value(USE_OPEN_GL).toBool() == true)) goToFlow = new GoToFlowGL(this,Configuration::getConfiguration().getFlowType()); diff --git a/YACReaderLibrary/YACReaderLibrary.pro b/YACReaderLibrary/YACReaderLibrary.pro index 3056f671..4c71f58d 100644 --- a/YACReaderLibrary/YACReaderLibrary.pro +++ b/YACReaderLibrary/YACReaderLibrary.pro @@ -134,7 +134,8 @@ HEADERS += comic_flow.h \ empty_container_info.h \ empty_special_list.h \ empty_reading_list_widget.h \ - ../common/scroll_management.h + ../common/scroll_management.h \ + ../common/opengl_checker.h !CONFIG(no_opengl) { CONFIG(legacy_gl_widget) { @@ -202,7 +203,8 @@ SOURCES += comic_flow.cpp \ empty_container_info.cpp \ empty_special_list.cpp \ empty_reading_list_widget.cpp \ - ../common/scroll_management.cpp + ../common/scroll_management.cpp \ + ../common/opengl_checker.cpp !CONFIG(no_opengl) { CONFIG(legacy_gl_widget) { diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 691c33ea..51675d36 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -86,6 +86,7 @@ #include "db_helper.h" #include "reading_list_item.h" +#include "opengl_checker.h" #include "QsLog.h" @@ -187,10 +188,15 @@ void LibraryWindow::doLayout() #ifndef NO_OPENGL //FLOW----------------------------------------------------------------------- //--------------------------------------------------------------------------- - if(QGLFormat::hasOpenGL() && !settings->contains(USE_OPEN_GL)) - { + + OpenGLChecker openGLChecker; + bool openGLAvailable = openGLChecker.hasCompatibleOpenGLVersion(); + + if(openGLAvailable && !settings->contains(USE_OPEN_GL)) settings->setValue(USE_OPEN_GL,2); - } + else + if(!openGLAvailable) + settings->setValue(USE_OPEN_GL,0); #endif //FOLDERS FILTER------------------------------------------------------------- //--------------------------------------------------------------------------- diff --git a/common/opengl_checker.cpp b/common/opengl_checker.cpp new file mode 100644 index 00000000..9a4353a5 --- /dev/null +++ b/common/opengl_checker.cpp @@ -0,0 +1,44 @@ +#include "opengl_checker.h" + +#include "QsLog.h" + +OpenGLChecker::OpenGLChecker() +{ + +} + +bool OpenGLChecker::hasCompatibleOpenGLVersion() +{ + QOpenGLContext * openGLContext = new QOpenGLContext(); + openGLContext->create(); + + if(!openGLContext->isValid()) + return false; + + QSurfaceFormat format = openGLContext->format(); + + int majorVersion = format.majorVersion(); + int minorVersion = format.minorVersion(); + + delete openGLContext; + + QLOG_INFO() << QString("OpenGL version %1.%2").arg(majorVersion).arg(minorVersion); + + if(format.renderableType() != QSurfaceFormat::OpenGL) //Desktop OpenGL + return false; + +#ifdef Q_OS_WIN //TODO check Qt version, and set this values depending on the use of QOpenGLWidget or QGLWidget + int majorTargetVersion = 1; + int minorTargetVersion = 5; +#else + int majorTargetVersion = 2; + int minorTargetVersion = 1; +#endif + + if(majorVersion < majorTargetVersion) + return false; + if(majorVersion == majorTargetVersion && minorVersion < minorTargetVersion) + return false; + + return true; +} diff --git a/common/opengl_checker.h b/common/opengl_checker.h new file mode 100644 index 00000000..6548a359 --- /dev/null +++ b/common/opengl_checker.h @@ -0,0 +1,15 @@ +#ifndef OPENGL_CHECKER_H +#define OPENGL_CHECKER_H + +#include + +class OpenGLChecker +{ +public: + OpenGLChecker(); + bool hasCompatibleOpenGLVersion(); +private: + //?? +}; + +#endif // OPENGL_CHECKER_H