diff --git a/libs/ui/dialogs/kis_dlg_preferences.h b/libs/ui/dialogs/kis_dlg_preferences.h --- a/libs/ui/dialogs/kis_dlg_preferences.h +++ b/libs/ui/dialogs/kis_dlg_preferences.h @@ -270,6 +270,9 @@ protected Q_SLOTS: void slotUseOpenGLToggled(bool isChecked); +private: + void updateOpenGLWarning(bool useOpenGL); + public: }; diff --git a/libs/ui/dialogs/kis_dlg_preferences.cc b/libs/ui/dialogs/kis_dlg_preferences.cc --- a/libs/ui/dialogs/kis_dlg_preferences.cc +++ b/libs/ui/dialogs/kis_dlg_preferences.cc @@ -841,6 +841,8 @@ cmbRenderer->setCurrentIndex(0); #endif + lblWarnOpenGL->hide(); + #ifdef Q_OS_WIN if (!(KisOpenGL::getSupportedOpenGLRenderers() & (KisOpenGL::RendererDesktopGL | KisOpenGL::RendererAngle))) { @@ -897,6 +899,7 @@ chkChannelsAsColor->setChecked(cfg.showSingleChannelAsColor()); chkHidePopups->setChecked(cfg.hidePopups()); + updateOpenGLWarning(grpOpenGL->isChecked()); connect(grpOpenGL, SIGNAL(toggled(bool)), SLOT(slotUseOpenGLToggled(bool))); KoColor gridColor(KoColorSpaceRegistry::instance()->rgb8()); @@ -964,6 +967,27 @@ chkUseTextureBuffer->setEnabled(isChecked); chkDisableVsync->setEnabled(isChecked); cmbFilterMode->setEnabled(isChecked); + updateOpenGLWarning(isChecked); +} + +void DisplaySettingsTab::updateOpenGLWarning(bool useOpenGL) +{ + if (useOpenGL) { + QString warnings = KisOpenGL::getWarnings(); + if (warnings.size() > 0) { + const QString warningTriangle = "" + + QString(QChar(0xA0, 0x26)) + ""; + lblWarnOpenGL->setWordWrap(true); + lblWarnOpenGL->setText("
" + warningTriangle + "  " + + "Canvas Graphics Acceleration probably won't work correctly on your machine (" + warnings + "). " + + "If you experience any problems, please turn it off.
"); + lblWarnOpenGL->show(); + } else { + lblWarnOpenGL->hide(); + } + } else { + lblWarnOpenGL->hide(); + } } //--------------------------------------------------------------------------------------------------- diff --git a/libs/ui/forms/wdgdisplaysettings.ui b/libs/ui/forms/wdgdisplaysettings.ui --- a/libs/ui/forms/wdgdisplaysettings.ui +++ b/libs/ui/forms/wdgdisplaysettings.ui @@ -181,7 +181,7 @@ true - + @@ -214,7 +214,7 @@ - + <html><head/><body><p>Try to disable vsync for Krita. This makes painting more responsive. Uncheck only when experiencing crashes with some GPU/driver combinations.</p></body></html> @@ -227,7 +227,7 @@ - + @@ -243,7 +243,7 @@ - + @@ -256,16 +256,26 @@ - + Renderer (needs restart): - + + + + + + + + 8 + + + diff --git a/libs/ui/opengl/kis_opengl.h b/libs/ui/opengl/kis_opengl.h --- a/libs/ui/opengl/kis_opengl.h +++ b/libs/ui/opengl/kis_opengl.h @@ -82,6 +82,8 @@ /// Check for OpenGL static bool hasOpenGL(); + static QString getWarnings(); + /** * @brief supportsFilter * @return True if OpenGL provides fence sync methods. diff --git a/libs/ui/opengl/kis_opengl.cpp b/libs/ui/opengl/kis_opengl.cpp --- a/libs/ui/opengl/kis_opengl.cpp +++ b/libs/ui/opengl/kis_opengl.cpp @@ -79,14 +79,21 @@ bool isSupportedVersion() const { return #ifdef Q_OS_OSX - ((glMajorVersion * 100 + glMinorVersion) >= 302 - && !rendererString.toLower().contains("amd") - && !rendererString.toLower().contains("radeon")) + (glMajorVersion * 100 + glMinorVersion) >= 302 #else (glMajorVersion >= 3 && (supportsDeprecatedFunctions || isOpenGLES)) || ((glMajorVersion * 100 + glMinorVersion) == 201) #endif - ; + ; + } + + QString getWarnings() const { +#ifdef Q_OS_OSX + if (rendererString.toLower().contains("amd") || rendererString.toLower().contains("radeon")) { + return "detected an unsupported AMD/Radeon GPU"; + } +#endif + return ""; } bool supportsLoD() const { @@ -600,3 +607,8 @@ { return openGLCheckResult->isSupportedVersion(); } + +QString KisOpenGL::getWarnings() +{ + return openGLCheckResult->getWarnings(); +}