From 2203491ab2b639f3def805ea9cecbab1add32105 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 9 Jan 2014 12:47:06 +0200 Subject: Enable using custom surface format for c++ graphs Main benefit is to be able to opt out of antialiasing. Task-number: QTRD-2734 Change-Id: Ic0681356f93d55e87535910a533be3f845703044 Reviewed-by: Mika Salmela --- src/datavisualization/engine/q3dbars.cpp | 7 +++-- src/datavisualization/engine/q3dbars.h | 2 +- src/datavisualization/engine/q3dscatter.cpp | 7 +++-- src/datavisualization/engine/q3dscatter.h | 2 +- src/datavisualization/engine/q3dsurface.cpp | 7 +++-- src/datavisualization/engine/q3dsurface.h | 2 +- src/datavisualization/engine/qabstract3dgraph.cpp | 36 +++++++++++++++-------- src/datavisualization/engine/qabstract3dgraph.h | 2 +- tests/barstest/main.cpp | 9 +++++- 9 files changed, 48 insertions(+), 26 deletions(-) diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp index 51ba8dbf..fe121e0d 100644 --- a/src/datavisualization/engine/q3dbars.cpp +++ b/src/datavisualization/engine/q3dbars.cpp @@ -93,10 +93,11 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE */ /*! - * Constructs a new 3D bar graph with optional \a parent window. + * Constructs a new 3D bar graph with optional \a parent window + * and surface \a format. */ -Q3DBars::Q3DBars(QWindow *parent) - : QAbstract3DGraph(new Q3DBarsPrivate(this), parent) +Q3DBars::Q3DBars(const QSurfaceFormat *format, QWindow *parent) + : QAbstract3DGraph(new Q3DBarsPrivate(this), format, parent) { dptr()->m_shared = new Bars3DController(geometry()); d_ptr->setVisualController(dptr()->m_shared); diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h index 16c16e93..2ed27c50 100644 --- a/src/datavisualization/engine/q3dbars.h +++ b/src/datavisualization/engine/q3dbars.h @@ -43,7 +43,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DBars : public QAbstract3DGraph Q_PROPERTY(QValue3DAxis *valueAxis READ valueAxis WRITE setValueAxis NOTIFY valueAxisChanged) public: - explicit Q3DBars(QWindow *parent = 0); + explicit Q3DBars(const QSurfaceFormat *format = 0, QWindow *parent = 0); virtual ~Q3DBars(); void addSeries(QBar3DSeries *series); diff --git a/src/datavisualization/engine/q3dscatter.cpp b/src/datavisualization/engine/q3dscatter.cpp index 9f4f1af8..f83ca17e 100644 --- a/src/datavisualization/engine/q3dscatter.cpp +++ b/src/datavisualization/engine/q3dscatter.cpp @@ -78,10 +78,11 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE */ /*! - * Constructs a new 3D scatter graph with optional \a parent window. + * Constructs a new 3D scatter graph with optional \a parent window + * and surface \a format. */ -Q3DScatter::Q3DScatter(QWindow *parent) - : QAbstract3DGraph(new Q3DScatterPrivate(this), parent) +Q3DScatter::Q3DScatter(const QSurfaceFormat *format, QWindow *parent) + : QAbstract3DGraph(new Q3DScatterPrivate(this), format, parent) { dptr()->m_shared = new Scatter3DController(geometry()); d_ptr->setVisualController(dptr()->m_shared); diff --git a/src/datavisualization/engine/q3dscatter.h b/src/datavisualization/engine/q3dscatter.h index cdea32fd..d9ad596c 100644 --- a/src/datavisualization/engine/q3dscatter.h +++ b/src/datavisualization/engine/q3dscatter.h @@ -40,7 +40,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DScatter : public QAbstract3DGraph Q_PROPERTY(QValue3DAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged) public: - explicit Q3DScatter(QWindow *parent = 0); + explicit Q3DScatter(const QSurfaceFormat *format = 0, QWindow *parent = 0); virtual ~Q3DScatter(); void addSeries(QScatter3DSeries *series); diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp index ad236220..15c48dbf 100644 --- a/src/datavisualization/engine/q3dsurface.cpp +++ b/src/datavisualization/engine/q3dsurface.cpp @@ -91,10 +91,11 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE */ /*! - * Constructs a new 3D surface graph with optional \a parent window. + * Constructs a new 3D surface graph with optional \a parent window + * and surface \a format. */ -Q3DSurface::Q3DSurface(QWindow *parent) - : QAbstract3DGraph(new Q3DSurfacePrivate(this), parent) +Q3DSurface::Q3DSurface(const QSurfaceFormat *format, QWindow *parent) + : QAbstract3DGraph(new Q3DSurfacePrivate(this), format, parent) { dptr()->m_shared = new Surface3DController(geometry()); d_ptr->setVisualController(dptr()->m_shared); diff --git a/src/datavisualization/engine/q3dsurface.h b/src/datavisualization/engine/q3dsurface.h index fd09e600..a5107ef1 100644 --- a/src/datavisualization/engine/q3dsurface.h +++ b/src/datavisualization/engine/q3dsurface.h @@ -38,7 +38,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DSurface : public QAbstract3DGraph Q_PROPERTY(QValue3DAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged) public: - explicit Q3DSurface(QWindow *parent = 0); + explicit Q3DSurface(const QSurfaceFormat *format = 0, QWindow *parent = 0); virtual ~Q3DSurface(); void addSeries(QSurface3DSeries *series); diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp index f17319d5..3aada9cf 100644 --- a/src/datavisualization/engine/qabstract3dgraph.cpp +++ b/src/datavisualization/engine/qabstract3dgraph.cpp @@ -55,23 +55,32 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE /*! * \internal */ -QAbstract3DGraph::QAbstract3DGraph(QAbstract3DGraphPrivate *d, QWindow *parent) +QAbstract3DGraph::QAbstract3DGraph(QAbstract3DGraphPrivate *d, const QSurfaceFormat *format, QWindow *parent) : QWindow(parent), d_ptr(d) { - d_ptr->m_context = new QOpenGLContext(this); - + // Default to frameless window, as typically graphs are not toplevel setFlags(flags() | Qt::FramelessWindowHint); - setSurfaceType(QWindow::OpenGLSurface); + QSurfaceFormat surfaceFormat; - surfaceFormat.setDepthBufferSize(24); + if (format) { + surfaceFormat = *format; + } else { + surfaceFormat.setDepthBufferSize(24); +#if !defined(QT_OPENGL_ES_2) + surfaceFormat.setSamples(8); +#endif + surfaceFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer); + } + #if !defined(QT_OPENGL_ES_2) - surfaceFormat.setSamples(8); surfaceFormat.setRenderableType(QSurfaceFormat::OpenGL); #else surfaceFormat.setRenderableType(QSurfaceFormat::OpenGLES); #endif - surfaceFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer); + + d_ptr->m_context = new QOpenGLContext(this); + setSurfaceType(QWindow::OpenGLSurface); setFormat(surfaceFormat); create(); @@ -82,13 +91,16 @@ QAbstract3DGraph::QAbstract3DGraph(QAbstract3DGraphPrivate *d, QWindow *parent) initializeOpenGLFunctions(); - const GLubyte *version = glGetString(GL_VERSION); - qDebug() << "OpenGL version:" << (const char *)version; - version = glGetString(GL_SHADING_LANGUAGE_VERSION); - qDebug() << "GLSL version:" << (const char *)version; + const GLubyte *shaderVersion = glGetString(GL_SHADING_LANGUAGE_VERSION); +#ifndef QT_NO_DEBUG + const GLubyte *openGLVersion = glGetString(GL_VERSION); + qDebug() << "OpenGL version:" << (const char *)openGLVersion; + qDebug() << "GLSL version:" << (const char *)shaderVersion; +#endif + #if !defined(QT_OPENGL_ES_2) // If we have real OpenGL, GLSL version must be 1.2 or over. Quit if not. - QStringList splitversionstr = QString::fromLatin1((const char *)version).split(QChar::fromLatin1(' ')); + QStringList splitversionstr = QString::fromLatin1((const char *)shaderVersion).split(QChar::fromLatin1(' ')); if (splitversionstr[0].toFloat() < 1.2) qFatal("GLSL version must be 1.20 or higher. Try installing latest display drivers."); #endif diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h index a7241004..5e39221c 100644 --- a/src/datavisualization/engine/qabstract3dgraph.h +++ b/src/datavisualization/engine/qabstract3dgraph.h @@ -45,7 +45,7 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DGraph : public QWindow, protected Q Q_PROPERTY(Q3DScene* scene READ scene) protected: - explicit QAbstract3DGraph(QAbstract3DGraphPrivate *d, QWindow *parent = 0); + explicit QAbstract3DGraph(QAbstract3DGraphPrivate *d, const QSurfaceFormat *format, QWindow *parent = 0); public: virtual ~QAbstract3DGraph(); diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp index e18aaed1..9147735e 100644 --- a/tests/barstest/main.cpp +++ b/tests/barstest/main.cpp @@ -42,7 +42,14 @@ int main(int argc, char **argv) QVBoxLayout *vLayout = new QVBoxLayout(); QVBoxLayout *vLayout2 = new QVBoxLayout(); - Q3DBars *widgetchart = new Q3DBars(); + // For testing custom surface format + QSurfaceFormat surfaceFormat; + surfaceFormat.setDepthBufferSize(24); +#if !defined(QT_OPENGL_ES_2) + surfaceFormat.setSamples(8); +#endif + + Q3DBars *widgetchart = new Q3DBars(&surfaceFormat); QSize screenSize = widgetchart->screen()->size(); QWidget *container = QWidget::createWindowContainer(widgetchart); -- cgit v1.2.3