diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2014-11-05 08:43:49 +0200 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@digia.com> | 2014-11-05 10:31:40 +0200 |
commit | 39d5ffbdc42f6645e13511828ea7a9997497068e (patch) | |
tree | 6b5cbf0fe4cb15f568fa1aba3aee5ed83d3fee29 /src/datavisualization | |
parent | a1feedcf46975a65970fb946282c742b091b508e (diff) |
Force software renderer to using ES2
Task-number: QTRD-3410
Change-Id: I86b240b6548ec4c94f6be0dc352ed112965926f3
Change-Id: I86b240b6548ec4c94f6be0dc352ed112965926f3
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>
Diffstat (limited to 'src/datavisualization')
-rw-r--r-- | src/datavisualization/doc/src/qtdatavisualization.qdoc | 2 | ||||
-rw-r--r-- | src/datavisualization/utils/qutils.h | 57 | ||||
-rw-r--r-- | src/datavisualization/utils/utils.cpp | 8 |
3 files changed, 57 insertions, 10 deletions
diff --git a/src/datavisualization/doc/src/qtdatavisualization.qdoc b/src/datavisualization/doc/src/qtdatavisualization.qdoc index b07074b1..c243a1cd 100644 --- a/src/datavisualization/doc/src/qtdatavisualization.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization.qdoc @@ -338,6 +338,8 @@ "QT += datavisualization" in the pro file. This is because Qt Data Visualization QML plugin has a dependency to Qt Data Visualization C++ library, which Qt Creator doesn't automatically add to the deployment package. + \li Only OpenGL ES2 emulation is available for software renderer (that is, when using + QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL)) \endlist */ diff --git a/src/datavisualization/utils/qutils.h b/src/datavisualization/utils/qutils.h index d4acfc99..86a0af5e 100644 --- a/src/datavisualization/utils/qutils.h +++ b/src/datavisualization/utils/qutils.h @@ -20,29 +20,68 @@ #define QUTILS_H #include <QtGui/QSurfaceFormat> +#include <QtGui/QOpenGLContext> +#include <QtGui/QOffscreenSurface> +#include <QtCore/QCoreApplication> namespace QtDataVisualization { inline static QSurfaceFormat qDefaultSurfaceFormat(bool antialias = true) { + bool isES = false; + QSurfaceFormat surfaceFormat; + // Common attributes surfaceFormat.setDepthBufferSize(24); surfaceFormat.setStencilBufferSize(8); surfaceFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer); surfaceFormat.setRenderableType(QSurfaceFormat::DefaultRenderableType); + + QOpenGLContext *ctx = QOpenGLContext::currentContext(); + QOffscreenSurface *dummySurface = 0; + if (!ctx) { + dummySurface = new QOffscreenSurface(); + dummySurface->setFormat(surfaceFormat); + dummySurface->create(); + ctx = new QOpenGLContext; + ctx->setFormat(surfaceFormat); + ctx->create(); + ctx->makeCurrent(dummySurface); + } + #if defined(QT_OPENGL_ES_2) - // Antialias not supported for ES - antialias = false; - surfaceFormat.setRedBufferSize(8); - surfaceFormat.setBlueBufferSize(8); - surfaceFormat.setGreenBufferSize(8); + isES = true; +#elif (QT_VERSION < QT_VERSION_CHECK(5, 3, 0)) + isES = false; +#else + isES = ctx->isOpenGLES(); #endif - if (antialias) - surfaceFormat.setSamples(8); - else - surfaceFormat.setSamples(0); + if (dummySurface) { + ctx->doneCurrent(); + delete ctx; + delete dummySurface; + } + + // We support only ES2 emulation with software renderer for now + if (QCoreApplication::testAttribute(Qt::AA_UseSoftwareOpenGL)) { + qWarning("Only OpenGL ES2 emulation is available for software rendering."); + isES = true; + } + + if (isES) { + // For ES2 only attributes + surfaceFormat.setRedBufferSize(8); + surfaceFormat.setBlueBufferSize(8); + surfaceFormat.setGreenBufferSize(8); + } else { + // For OpenGL only attributes + if (antialias) + surfaceFormat.setSamples(8); + else + surfaceFormat.setSamples(0); + } return surfaceFormat; } diff --git a/src/datavisualization/utils/utils.cpp b/src/datavisualization/utils/utils.cpp index 15ef444c..df74cbd3 100644 --- a/src/datavisualization/utils/utils.cpp +++ b/src/datavisualization/utils/utils.cpp @@ -329,7 +329,7 @@ void Utils::resolveStatics() QOpenGLContext *ctx = QOpenGLContext::currentContext(); QOffscreenSurface *dummySurface = 0; if (!ctx) { - QSurfaceFormat surfaceFormat = qDefaultSurfaceFormat(); + QSurfaceFormat surfaceFormat; dummySurface = new QOffscreenSurface(); dummySurface->setFormat(surfaceFormat); dummySurface->create(); @@ -355,6 +355,12 @@ void Utils::resolveStatics() delete dummySurface; } + // We support only ES2 emulation with software renderer for now + if (QCoreApplication::testAttribute(Qt::AA_UseSoftwareOpenGL)) { + qWarning("Only OpenGL ES2 emulation is available for software rendering."); + isES = true; + } + staticsResolved = true; } |