From eaf04207bddd778380cae178db1bf3cce7d6b9df Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 8 Oct 2014 16:57:07 +0200 Subject: Improve threadedqopenglwidget example. Retrieve vendor/renderer name similar to context info and exclude renderers that do not support threaded Open GL (ANGLE/noveau). Change-Id: I690c2fc277538bf28bf1f6032c2e017ede15e434 Reviewed-by: Laszlo Agocs --- examples/opengl/threadedqopenglwidget/glwidget.h | 2 +- examples/opengl/threadedqopenglwidget/main.cpp | 47 +++++++++++++++++----- .../opengl/threadedqopenglwidget/mainwindow.cpp | 1 + 3 files changed, 39 insertions(+), 11 deletions(-) (limited to 'examples/opengl') diff --git a/examples/opengl/threadedqopenglwidget/glwidget.h b/examples/opengl/threadedqopenglwidget/glwidget.h index 8319faf322..c063e846dc 100644 --- a/examples/opengl/threadedqopenglwidget/glwidget.h +++ b/examples/opengl/threadedqopenglwidget/glwidget.h @@ -100,7 +100,7 @@ class GLWidget : public QOpenGLWidget { Q_OBJECT public: - GLWidget(QWidget *parent); + explicit GLWidget(QWidget *parent = 0); ~GLWidget(); protected: diff --git a/examples/opengl/threadedqopenglwidget/main.cpp b/examples/opengl/threadedqopenglwidget/main.cpp index 75b7f5e46f..2c94469b7c 100644 --- a/examples/opengl/threadedqopenglwidget/main.cpp +++ b/examples/opengl/threadedqopenglwidget/main.cpp @@ -40,10 +40,19 @@ #include #include +#include #include +#include #include "mainwindow.h" #include "glwidget.h" +static QString getGlString(QOpenGLFunctions *functions, GLenum name) +{ + if (const GLubyte *p = functions->glGetString(name)) + return QString::fromLatin1(reinterpret_cast(p)); + return QString(); +} + int main( int argc, char ** argv ) { QApplication a( argc, argv ); @@ -54,20 +63,38 @@ int main( int argc, char ** argv ) // Two top-level windows with two QOpenGLWidget children in each. // The rendering for the four QOpenGLWidgets happens on four separate threads. - MainWindow mw1; - mw1.setMinimumSize(800, 400); - mw1.show(); + GLWidget topLevelGlWidget; + QPoint pos = QApplication::desktop()->availableGeometry(&topLevelGlWidget).topLeft() + QPoint(200, 200); + topLevelGlWidget.setWindowTitle(QStringLiteral("Threaded QOpenGLWidget example top level")); + topLevelGlWidget.resize(200, 200); + topLevelGlWidget.move(pos); + topLevelGlWidget.show(); + + const QString glInfo = getGlString(topLevelGlWidget.context()->functions(), GL_VENDOR) + + QLatin1Char('/') + getGlString(topLevelGlWidget.context()->functions(), GL_RENDERER); + + const bool supportsThreading = !glInfo.contains(QLatin1String("nouveau"), Qt::CaseInsensitive) + && !glInfo.contains(QLatin1String("ANGLE"), Qt::CaseInsensitive); + + const QString toolTip = supportsThreading ? glInfo : glInfo + QStringLiteral("\ndoes not support threaded OpenGL."); + topLevelGlWidget.setToolTip(toolTip); + + QScopedPointer mw1; QScopedPointer mw2; - if (!QApplication::arguments().contains(QStringLiteral("--single"))) { + if (supportsThreading && !QApplication::arguments().contains(QStringLiteral("--single"))) { + pos += QPoint(100, 100); + mw1.reset(new MainWindow); + mw1->setToolTip(toolTip); + mw1->move(pos); + mw1->setWindowTitle(QStringLiteral("Threaded QOpenGLWidget example #1")); + mw1->show(); + pos += QPoint(100, 100); mw2.reset(new MainWindow); - mw2->setMinimumSize(800, 400); + mw2->setToolTip(toolTip); + mw2->move(pos); + mw2->setWindowTitle(QStringLiteral("Threaded QOpenGLWidget example #2")); mw2->show(); - - // And a top-level. - GLWidget *bonus = new GLWidget(0); - bonus->resize(200, 200); - bonus->show(); } return a.exec(); diff --git a/examples/opengl/threadedqopenglwidget/mainwindow.cpp b/examples/opengl/threadedqopenglwidget/mainwindow.cpp index 29c59573cf..de866f5615 100644 --- a/examples/opengl/threadedqopenglwidget/mainwindow.cpp +++ b/examples/opengl/threadedqopenglwidget/mainwindow.cpp @@ -43,6 +43,7 @@ MainWindow::MainWindow() { + setMinimumSize(800, 400); GLWidget *glwidget1 = new GLWidget(this); glwidget1->resize(400, 400); -- cgit v1.2.3 From 59c68e6830215a5ead918666074da45638b72fe3 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Mon, 20 Oct 2014 11:31:02 +0200 Subject: Remove unused variable in opengl examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To avoid warnings with some compilers Change-Id: Iabe4f38c0bee29ab17149120d12ce198b49547c8 Reviewed-by: Topi Reiniƶ --- examples/opengl/threadedqopenglwidget/glwidget.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'examples/opengl') diff --git a/examples/opengl/threadedqopenglwidget/glwidget.cpp b/examples/opengl/threadedqopenglwidget/glwidget.cpp index d447f0c716..ecf1287045 100644 --- a/examples/opengl/threadedqopenglwidget/glwidget.cpp +++ b/examples/opengl/threadedqopenglwidget/glwidget.cpp @@ -42,8 +42,6 @@ #include #include -const int bubbleNum = 8; - GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent) { -- cgit v1.2.3