summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <[email protected]>2016-02-03 10:11:13 +0100
committerLaszlo Agocs <[email protected]>2016-03-02 08:50:33 +0000
commitd56203436a2e59c35e0243ad86338d131de62f20 (patch)
treea1ebae871bcd543fa3b6e48a09961f8ab1032f76
parent235c1c776a51717377d18d8b537ebffeee65560a (diff)
Use an enum for versioning the opengl function backends
Saves some code, is easier to maintain and will allow for some more nice refactoring. Change-Id: Ica7ae8e9d36acbe6586e488bc6aff114336c65bb Reviewed-by: Laszlo Agocs <[email protected]>
-rw-r--r--src/gui/kernel/qopenglcontext.cpp7
-rw-r--r--src/gui/kernel/qopenglcontext.h7
-rw-r--r--src/gui/kernel/qopenglcontext_p.h2
-rw-r--r--src/gui/opengl/qopenglversionfunctions.cpp8
-rw-r--r--src/gui/opengl/qopenglversionfunctions.h180
5 files changed, 114 insertions, 90 deletions
diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp
index f301b21ec1b..a45217ca296 100644
--- a/src/gui/kernel/qopenglcontext.cpp
+++ b/src/gui/kernel/qopenglcontext.cpp
@@ -1302,7 +1302,7 @@ QOpenGLContext *QOpenGLContext::globalShareContext()
/*!
\internal
*/
-QOpenGLVersionFunctionsBackend *QOpenGLContext::functionsBackend(const QOpenGLVersionStatus &v) const
+QOpenGLVersionFunctionsBackend *QOpenGLContext::functionsBackend(const QOpenGLVersionFunctionsBackend::Version v) const
{
Q_D(const QOpenGLContext);
return d->versionFunctionsBackend.value(v, 0);
@@ -1311,8 +1311,7 @@ QOpenGLVersionFunctionsBackend *QOpenGLContext::functionsBackend(const QOpenGLVe
/*!
\internal
*/
-void QOpenGLContext::insertFunctionsBackend(const QOpenGLVersionStatus &v,
- QOpenGLVersionFunctionsBackend *backend)
+void QOpenGLContext::insertFunctionsBackend(const QOpenGLVersionFunctionsBackend::Version v, QOpenGLVersionFunctionsBackend *backend)
{
Q_D(QOpenGLContext);
d->versionFunctionsBackend.insert(v, backend);
@@ -1321,7 +1320,7 @@ void QOpenGLContext::insertFunctionsBackend(const QOpenGLVersionStatus &v,
/*!
\internal
*/
-void QOpenGLContext::removeFunctionsBackend(const QOpenGLVersionStatus &v)
+void QOpenGLContext::removeFunctionsBackend(const QOpenGLVersionFunctionsBackend::Version v)
{
Q_D(QOpenGLContext);
d->versionFunctionsBackend.remove(v);
diff --git a/src/gui/kernel/qopenglcontext.h b/src/gui/kernel/qopenglcontext.h
index 130d55464f6..9bb48ab4fc7 100644
--- a/src/gui/kernel/qopenglcontext.h
+++ b/src/gui/kernel/qopenglcontext.h
@@ -237,10 +237,9 @@ private:
void setQGLContextHandle(void *handle,void (*qGLContextDeleteFunction)(void *));
void deleteQGLContext();
- QOpenGLVersionFunctionsBackend* functionsBackend(const QOpenGLVersionStatus &v) const;
- void insertFunctionsBackend(const QOpenGLVersionStatus &v,
- QOpenGLVersionFunctionsBackend *backend);
- void removeFunctionsBackend(const QOpenGLVersionStatus &v);
+ QOpenGLVersionFunctionsBackend* functionsBackend(QOpenGLVersionFunctionsBackend::Version v) const;
+ void insertFunctionsBackend(const QOpenGLVersionFunctionsBackend::Version v, QOpenGLVersionFunctionsBackend *backend);
+ void removeFunctionsBackend(const QOpenGLVersionFunctionsBackend::Version v);
void insertExternalFunctions(QAbstractOpenGLFunctions *f);
void removeExternalFunctions(QAbstractOpenGLFunctions *f);
diff --git a/src/gui/kernel/qopenglcontext_p.h b/src/gui/kernel/qopenglcontext_p.h
index 7fc922f3881..57053a6d615 100644
--- a/src/gui/kernel/qopenglcontext_p.h
+++ b/src/gui/kernel/qopenglcontext_p.h
@@ -222,7 +222,7 @@ public:
}
mutable QHash<QOpenGLVersionProfile, QAbstractOpenGLFunctions *> versionFunctions;
- mutable QHash<QOpenGLVersionStatus, QOpenGLVersionFunctionsBackend *> versionFunctionsBackend;
+ mutable QHash<QOpenGLVersionFunctionsBackend::Version, QOpenGLVersionFunctionsBackend *> versionFunctionsBackend;
mutable QSet<QAbstractOpenGLFunctions *> externalVersionFunctions;
void *qGLContextHandle;
diff --git a/src/gui/opengl/qopenglversionfunctions.cpp b/src/gui/opengl/qopenglversionfunctions.cpp
index b8767bd46d2..a5b03315e6b 100644
--- a/src/gui/opengl/qopenglversionfunctions.cpp
+++ b/src/gui/opengl/qopenglversionfunctions.cpp
@@ -85,22 +85,20 @@ void CLASS::init() \
#define QT_OPENGL_IMPLEMENT_WIN QT_OPENGL_IMPLEMENT
#endif
-QOpenGLVersionFunctionsBackend *QAbstractOpenGLFunctionsPrivate::functionsBackend(QOpenGLContext *context,
- const QOpenGLVersionStatus &v)
+QOpenGLVersionFunctionsBackend *QAbstractOpenGLFunctionsPrivate::functionsBackend(QOpenGLContext *context, QOpenGLVersionFunctionsBackend::Version v)
{
Q_ASSERT(context);
return context->functionsBackend(v);
}
-void QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(QOpenGLContext *context,
- const QOpenGLVersionStatus &v,
+void QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(QOpenGLContext *context, QOpenGLVersionFunctionsBackend::Version v,
QOpenGLVersionFunctionsBackend *backend)
{
Q_ASSERT(context);
context->insertFunctionsBackend(v, backend);
}
-void QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(QOpenGLContext *context, const QOpenGLVersionStatus &v)
+void QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(QOpenGLContext *context, QOpenGLVersionFunctionsBackend::Version v)
{
Q_ASSERT(context);
context->removeFunctionsBackend(v);
diff --git a/src/gui/opengl/qopenglversionfunctions.h b/src/gui/opengl/qopenglversionfunctions.h
index 537d4f4dd7e..7d2616a5d91 100644
--- a/src/gui/opengl/qopenglversionfunctions.h
+++ b/src/gui/opengl/qopenglversionfunctions.h
@@ -75,23 +75,6 @@ class QOpenGLContext;
qFatal("This function was erroneously included in previous versions of Qt and is here only for binary compatibility. " \
"If you need to use this function, please use a legacy OpenGL version or a Compatibility profile.")
-#define QT_OPENGL_DECLARE_FUNCTIONS(ret, name, args) \
- ret (QOPENGLF_APIENTRYP name)args;
-#define QT_OPENGL_COUNT_FUNCTIONS(ret, name, args) +1
-
-#define QT_OPENGL_DECLARE(FUNCTIONS) \
-public: \
- struct Functions { \
- FUNCTIONS(QT_OPENGL_DECLARE_FUNCTIONS) \
- }; \
- union { \
- QFunctionPointer functions[FUNCTIONS(QT_OPENGL_COUNT_FUNCTIONS)]; \
- Functions f; \
- }; \
-private: \
- void init()
-
-
struct QOpenGLVersionStatus
{
enum OpenGLStatus {
@@ -130,9 +113,56 @@ Q_DECL_CONSTEXPR inline bool operator!=(const QOpenGLVersionStatus &lhs, const Q
return !operator==(lhs, rhs);
}
+#define QT_OPENGL_DECLARE_FUNCTIONS(ret, name, args) \
+ ret (QOPENGLF_APIENTRYP name)args;
+#define QT_OPENGL_COUNT_FUNCTIONS(ret, name, args) +1
+
+#define QT_OPENGL_DECLARE(FUNCTIONS) \
+public: \
+ struct Functions { \
+ FUNCTIONS(QT_OPENGL_DECLARE_FUNCTIONS) \
+ }; \
+ union { \
+ QFunctionPointer functions[FUNCTIONS(QT_OPENGL_COUNT_FUNCTIONS)]; \
+ Functions f; \
+ }; \
+private: \
+ void init()
+
class QOpenGLVersionFunctionsBackend
{
public:
+ enum Version {
+ OpenGL_1_0,
+ OpenGL_1_1,
+ OpenGL_1_2,
+ OpenGL_1_3,
+ OpenGL_1_4,
+ OpenGL_1_5,
+ OpenGL_2_0,
+ OpenGL_2_1,
+ OpenGL_3_0,
+ OpenGL_3_1,
+ OpenGL_3_2_Core,
+ OpenGL_3_3_Core,
+ OpenGL_4_0_Core,
+ OpenGL_4_1_Core,
+ OpenGL_4_2_Core,
+ OpenGL_4_3_Core,
+ OpenGL_4_4_Core,
+ OpenGL_4_5_Core,
+ OpenGL_1_0_Deprecated,
+ OpenGL_1_1_Deprecated,
+ OpenGL_1_2_Deprecated,
+ OpenGL_1_3_Deprecated,
+ OpenGL_1_4_Deprecated,
+ OpenGL_2_0_Deprecated,
+ OpenGL_3_0_Deprecated,
+ OpenGL_3_3_Deprecated,
+ OpenGL_4_5_Deprecated,
+ OpenGLVersionBackendCount
+ };
+
QOpenGLVersionFunctionsBackend(QOpenGLContext *ctx)
: context(ctx)
{}
@@ -151,12 +181,10 @@ public:
initialized(false)
{}
- static QOpenGLVersionFunctionsBackend *functionsBackend(QOpenGLContext *context,
- const QOpenGLVersionStatus &v);
- static void insertFunctionsBackend(QOpenGLContext *context,
- const QOpenGLVersionStatus &v,
+ static QOpenGLVersionFunctionsBackend *functionsBackend(QOpenGLContext *context, QOpenGLVersionFunctionsBackend::Version v);
+ static void insertFunctionsBackend(QOpenGLContext *context, QOpenGLVersionFunctionsBackend::Version v,
QOpenGLVersionFunctionsBackend *backend);
- static void removeFunctionsBackend(QOpenGLContext *context, const QOpenGLVersionStatus &v);
+ static void removeFunctionsBackend(QOpenGLContext *context, QOpenGLVersionFunctionsBackend::Version v);
static void insertExternalFunctions(QOpenGLContext *context, QAbstractOpenGLFunctions *f);
static void removeExternalFunctions(QOpenGLContext *context, QAbstractOpenGLFunctions *f);
@@ -203,8 +231,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 0, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_0; }
// OpenGL 1.0 core functions
#define QT_OPENGL_1_0_FUNCTIONS(F) \
@@ -269,8 +297,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 1, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_1; }
// OpenGL 1.1 core functions
#define QT_OPENGL_1_1_FUNCTIONS(F) \
@@ -303,8 +331,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 2, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_2; }
// OpenGL 1.2 core functions
#define QT_OPENGL_1_2_FUNCTIONS(F) \
@@ -327,8 +355,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 3, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_3; }
// OpenGL 1.3 core functions
#define QT_OPENGL_1_3_FUNCTIONS(F) \
@@ -354,8 +382,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 4, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_4; }
// OpenGL 1.4 core functions
#define QT_OPENGL_1_4_FUNCTIONS(F) \
@@ -379,8 +407,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 5, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_5; }
// OpenGL 1.5 core functions
#define QT_OPENGL_1_5_FUNCTIONS(F) \
@@ -416,8 +444,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(2, 0, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_2_0; }
// OpenGL 2.0 core functions
#define QT_OPENGL_2_0_FUNCTIONS(F) \
@@ -527,8 +555,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(2, 1, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_2_1; }
// OpenGL 2.1 core functions
#define QT_OPENGL_2_1_FUNCTIONS(F) \
@@ -551,8 +579,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(3, 0, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_3_0; }
// OpenGL 3.0 core functions
#define QT_OPENGL_3_0_FUNCTIONS(F) \
@@ -653,8 +681,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(3, 1, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_3_1; }
// OpenGL 3.1 core functions
#define QT_OPENGL_3_1_FUNCTIONS(F) \
@@ -683,8 +711,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(3, 2, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_3_2_Core; }
// OpenGL 3.2 core functions
#define QT_OPENGL_3_2_FUNCTIONS(F) \
@@ -720,8 +748,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(3, 3, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_3_3_Core; }
// OpenGL 3.3 core functions
#define QT_OPENGL_3_3_FUNCTIONS(F) \
@@ -796,8 +824,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(4, 0, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_4_0_Core; }
// OpenGL 4.0 core functions
#define QT_OPENGL_4_0_FUNCTIONS(F) \
@@ -860,8 +888,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(4, 1, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_4_1_Core; }
// OpenGL 4.1 core functions
#define QT_OPENGL_4_1_FUNCTIONS(F) \
@@ -966,8 +994,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(4, 2, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_4_2_Core; }
// OpenGL 4.2 core functions
#define QT_OPENGL_4_2_FUNCTIONS(F) \
@@ -996,8 +1024,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(4, 3, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_4_3_Core; }
// OpenGL 4.3 core functions
#define QT_OPENGL_4_3_FUNCTIONS(F) \
@@ -1057,8 +1085,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(4, 4, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_4_4_Core; }
// OpenGL 4.4 core functions
#define QT_OPENGL_4_4_FUNCTIONS(F) \
@@ -1084,8 +1112,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(4, 5, QOpenGLVersionStatus::CoreStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_4_5_Core; }
// OpenGL 4.5 core functions
#define QT_OPENGL_4_5_FUNCTIONS(F) \
@@ -1208,8 +1236,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 0, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_0_Deprecated; }
// OpenGL 1.0 deprecated functions
#define QT_OPENGL_1_0_DEPRECATED_FUNCTIONS(F) \
@@ -1484,8 +1512,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 1, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_1_Deprecated; }
// OpenGL 1.1 deprecated functions
#define QT_OPENGL_1_1_DEPRECATED_FUNCTIONS(F) \
@@ -1519,8 +1547,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 2, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_2_Deprecated; }
// OpenGL 1.2 deprecated functions
#define QT_OPENGL_1_2_DEPRECATED_FUNCTIONS(F) \
@@ -1569,8 +1597,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 3, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_3_Deprecated; }
// OpenGL 1.3 deprecated functions
#define QT_OPENGL_1_3_DEPRECATED_FUNCTIONS(F) \
@@ -1624,8 +1652,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(1, 4, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_1_4_Deprecated; }
// OpenGL 1.4 deprecated functions
#define QT_OPENGL_1_4_DEPRECATED_FUNCTIONS(F) \
@@ -1680,8 +1708,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(2, 0, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_2_0_Deprecated; }
// OpenGL 2.0 deprecated functions
#define QT_OPENGL_2_0_DEPRECATED_FUNCTIONS(F) \
@@ -1734,8 +1762,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(3, 0, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_3_0_Deprecated; }
// OpenGL 3.0 deprecated functions
#define QT_OPENGL_3_0_DEPRECATED_FUNCTIONS(F) \
@@ -1772,8 +1800,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(3, 3, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_3_3_Deprecated; }
// OpenGL 3.3 deprecated functions
#define QT_OPENGL_3_3_DEPRECATED_FUNCTIONS(F) \
@@ -1820,8 +1848,8 @@ public:
init();
}
- Q_DECL_CONSTEXPR static QOpenGLVersionStatus versionStatus()
- { return QOpenGLVersionStatus(4, 5, QOpenGLVersionStatus::DeprecatedStatus); }
+ Q_DECL_CONSTEXPR static Version versionStatus()
+ { return OpenGL_4_5_Deprecated; }
// OpenGL 4.5 deprecated functions
#define QT_OPENGL_4_5_DEPRECATED_FUNCTIONS(F) \