summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/utils/qutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/utils/qutils.h')
-rw-r--r--src/datavisualization/utils/qutils.h59
1 files changed, 50 insertions, 9 deletions
diff --git a/src/datavisualization/utils/qutils.h b/src/datavisualization/utils/qutils.h
index d4acfc99..93226be9 100644
--- a/src/datavisualization/utils/qutils.h
+++ b/src/datavisualization/utils/qutils.h
@@ -20,29 +20,70 @@
#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 (dummySurface) {
+ ctx->doneCurrent();
+ delete ctx;
+ delete dummySurface;
+ }
+
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0))
+ // 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;
+ }
#endif
- if (antialias)
- surfaceFormat.setSamples(8);
- else
- surfaceFormat.setSamples(0);
+ 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;
}