summaryrefslogtreecommitdiffstats
path: root/src/datavisualizationqml2/glstatestore_p.h
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-02-27 11:23:17 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-02-28 11:05:25 +0200
commit86b4e19ee160ee3e84210595db5e6af08a8b9e46 (patch)
treee1f7f1d8dbaa7cc520f7efc8b45868d29aa6c71f /src/datavisualizationqml2/glstatestore_p.h
parent34a7223467a45e33c1b344f1e1880bc818b66b27 (diff)
Introduce state storing for mac and android.
At least some mac and android environments do not handle shared contexts properly, leading to slowdowns and/or artifacts. Disable context sharing on mac and android, and instead store and restore relevant opengl state. Also improve renderer and context cleanup Change-Id: I8fa596b95f6ff20d53c950a34b5c28513acbc18f Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualizationqml2/glstatestore_p.h')
-rw-r--r--src/datavisualizationqml2/glstatestore_p.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/datavisualizationqml2/glstatestore_p.h b/src/datavisualizationqml2/glstatestore_p.h
new file mode 100644
index 00000000..560598bf
--- /dev/null
+++ b/src/datavisualizationqml2/glstatestore_p.h
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef GLSTATESTORE_P_H
+#define GLSTATESTORE_P_H
+
+//#define VERBOSE_STATE_STORE
+
+#include <QObject>
+#include <QtGui/QOpenGLFunctions>
+#include <QtGui/QOpenGLContext>
+#ifdef VERBOSE_STATE_STORE
+#include "enumtostringmap_p.h"
+#endif
+
+class GLStateStore : public QObject, protected QOpenGLFunctions
+{
+ Q_OBJECT
+public:
+ explicit GLStateStore(QOpenGLContext *context, QObject *parent = 0);
+ ~GLStateStore();
+
+ void storeGLState();
+ void restoreGLState();
+ void initGLDefaultState();
+
+#ifdef VERBOSE_STATE_STORE
+ void printCurrentState(bool in);
+ EnumToStringMap *m_map;
+#endif
+
+ GLint m_scissorBox[4];
+ GLboolean m_isScissorTestEnabled;
+
+#if !defined(QT_OPENGL_ES_2)
+ GLint m_drawFramebuffer;
+ GLint m_readFramebuffer;
+#endif
+ GLint m_renderbuffer;
+ GLfloat m_clearColor[4];
+ GLfloat m_clearDepth;
+ GLboolean m_isBlendingEnabled;
+ GLboolean m_isDepthTestEnabled;
+ GLint m_depthFunc;
+ GLboolean m_isDepthWriteEnabled;
+ GLint m_currentProgram;
+ GLint m_maxVertexAttribs;
+ GLint *m_vertexAttribArrayEnabledStates;
+ GLint *m_vertexAttribArrayBoundBuffers;
+ GLint *m_vertexAttribArraySizes;
+ GLint *m_vertexAttribArrayTypes;
+ GLint *m_vertexAttribArrayNormalized;
+ GLint *m_vertexAttribArrayStrides;
+ GLint *m_vertexAttribArrayOffsets;
+
+ GLint m_activeTexture;
+ GLint m_texBinding2D;
+ GLint m_frontFace;
+ GLboolean m_isCullFaceEnabled;
+ GLint m_cullFaceMode;
+ GLint m_blendEquationRGB;
+ GLint m_blendEquationAlpha;
+ GLint m_blendDestAlpha;
+ GLint m_blendDestRGB;
+ GLint m_blendSrcAlpha;
+ GLint m_blendSrcRGB;
+ GLint m_boundArrayBuffer;
+ GLint m_boundElementArrayBuffer;
+ GLboolean m_polygonOffsetFillEnabled;
+ GLfloat m_polygonOffsetFactor;
+ GLfloat m_polygonOffsetUnits;
+};
+
+#endif