summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README3
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization.qdoc2
-rw-r--r--src/datavisualization/utils/qutils.h57
-rw-r--r--src/datavisualization/utils/utils.cpp8
4 files changed, 59 insertions, 11 deletions
diff --git a/README b/README
index 667dcdaa..96099dbe 100644
--- a/README
+++ b/README
@@ -88,4 +88,5 @@ Known Issues
"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.
-
+- Only OpenGL ES2 emulation is available for software renderer (that is, when using
+ QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL))
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;
}