This commit is contained in:
itsmattkc
2020-06-17 19:56:27 +10:00
4 changed files with 36 additions and 42 deletions
-31
View File
@@ -38,10 +38,6 @@
OLIVE_NAMESPACE_ENTER
#ifdef Q_OS_LINUX
bool ViewerDisplayWidget::nouveau_check_done_ = false;
#endif
ViewerDisplayWidget::ViewerDisplayWidget(QWidget *parent) :
ManagedDisplayWidget(parent),
signal_cursor_color_(false),
@@ -199,21 +195,6 @@ void ViewerDisplayWidget::initializeGL()
ManagedDisplayWidget::initializeGL();
connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &ViewerDisplayWidget::ContextCleanup, Qt::DirectConnection);
#ifdef Q_OS_LINUX
if (!nouveau_check_done_) {
const char* vendor = reinterpret_cast<const char*>(context()->functions()->glGetString(GL_VENDOR));
if (!strcmp(vendor, "nouveau")) {
// Working with Qt widgets in this function segfaults, so we queue the messagebox for later
QMetaObject::invokeMethod(this,
"ShowNouveauWarning",
Qt::QueuedConnection);
}
nouveau_check_done_ = true;
}
#endif
}
void ViewerDisplayWidget::paintGL()
@@ -305,18 +286,6 @@ rational ViewerDisplayWidget::GetGizmoTime()
return GetAdjustedTime(GetTimeTarget(), gizmos_, time_, NodeParam::kInput);
}
#ifdef Q_OS_LINUX
void ViewerDisplayWidget::ShowNouveauWarning()
{
QMessageBox::warning(this,
tr("Driver Warning"),
tr("Olive has detected your system is using the Nouveau graphics driver.\n\nThis driver is "
"known to have stability and performance issues with Olive. It is highly recommended "
"you install the proprietary NVIDIA driver before continuing to use Olive."),
QMessageBox::Ok);
}
#endif
void ViewerDisplayWidget::ContextCleanup()
{
makeCurrent();
-11
View File
@@ -160,10 +160,6 @@ private:
*/
QMatrix4x4 matrix_;
#ifdef Q_OS_LINUX
static bool nouveau_check_done_;
#endif
bool signal_cursor_color_;
ViewerSafeMarginInfo safe_margin_;
@@ -184,13 +180,6 @@ private slots:
*/
void ContextCleanup();
#ifdef Q_OS_LINUX
/**
* @brief Shows warning messagebox if Nouveau is detected
*/
void ShowNouveauWarning();
#endif
};
OLIVE_NAMESPACE_EXIT
+30
View File
@@ -417,6 +417,18 @@ void MainWindow::StatusBarDoubleClicked()
task_man_panel_->raise();
}
#ifdef Q_OS_LINUX
void MainWindow::ShowNouveauWarning()
{
QMessageBox::warning(this,
tr("Driver Warning"),
tr("Olive has detected your system is using the Nouveau graphics driver.\n\nThis driver is "
"known to have stability and performance issues with Olive. It is highly recommended "
"you install the proprietary NVIDIA driver before continuing to use Olive."),
QMessageBox::Ok);
}
#endif
void MainWindow::UpdateTitle()
{
if (Core::instance()->GetActiveProject()) {
@@ -632,6 +644,24 @@ void MainWindow::SetDefaultLayout()
Qt::Vertical);
}
void MainWindow::showEvent(QShowEvent *e)
{
QMainWindow::showEvent(e);
#ifdef Q_OS_LINUX
// Check for nouveau since that driver really doesn't work with Olive
QOffscreenSurface surface;
surface.create();
QOpenGLContext context;
context.create();
context.makeCurrent(&surface);
const char* vendor = reinterpret_cast<const char*>(context.functions()->glGetString(GL_VENDOR));
if (!strcmp(vendor, "nouveau")) {
QMetaObject::invokeMethod(this, "ShowNouveauWarning", Qt::QueuedConnection);
}
#endif
}
template<typename T>
T *MainWindow::AppendPanelInternal(QList<T*>& list)
{
+6
View File
@@ -104,6 +104,8 @@ public slots:
void SetDefaultLayout();
protected:
virtual void showEvent(QShowEvent* e) override;
virtual void closeEvent(QCloseEvent* e) override;
#ifdef Q_OS_WINDOWS
@@ -169,6 +171,10 @@ private slots:
void StatusBarDoubleClicked();
#ifdef Q_OS_LINUX
void ShowNouveauWarning();
#endif
};
OLIVE_NAMESPACE_EXIT