summaryrefslogtreecommitdiffstats
path: root/src/gui/opengl/qtriangulator.cpp
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@nokia.com>2011-09-07 08:40:28 +0200
committerGunnar Sletta <gunnar.sletta@nokia.com>2011-09-07 08:50:49 +0200
commitc8fcc2929820b5deafc1e84a3bcb719d87028bd6 (patch)
tree20ebc64cff3a3d4f3747299df89cbd75991d2c30 /src/gui/opengl/qtriangulator.cpp
parent6119d12d7d7d63b00891e7fa21a5fab6751fb062 (diff)
Fixed crash in tst_QGL::multipleFBOInterleavedRendering().
Properly check for the ElementIndexUint extension. Change-Id: I8117aa052f2dd697a2dadeb7ce84a415b5fd24c8 Reviewed-on: http://codereview.qt.nokia.com/4311 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
Diffstat (limited to 'src/gui/opengl/qtriangulator.cpp')
-rw-r--r--src/gui/opengl/qtriangulator.cpp39
1 files changed, 19 insertions, 20 deletions
diff --git a/src/gui/opengl/qtriangulator.cpp b/src/gui/opengl/qtriangulator.cpp
index d66b2ac9a5..67c2a6494e 100644
--- a/src/gui/opengl/qtriangulator.cpp
+++ b/src/gui/opengl/qtriangulator.cpp
@@ -55,6 +55,7 @@
#include <QtCore/qalgorithms.h>
#include <private/qopenglcontext_p.h>
+#include <private/qopenglextensions_p.h>
#include <private/qrbtree_p.h>
#include <math.h>
@@ -2508,12 +2509,19 @@ void QTriangulator<T>::MonotoneToTriangles::decompose()
// qTriangulate //
//============================================================================//
+static bool hasElementIndexUint()
+{
+ QOpenGLContext *context = QOpenGLContext::currentContext();
+ if (!context)
+ return false;
+ return static_cast<QOpenGLExtensions *>(context->functions())->hasOpenGLExtension(QOpenGLExtensions::ElementIndexUint);
+}
+
Q_GUI_EXPORT QTriangleSet qTriangulate(const qreal *polygon,
int count, uint hint, const QTransform &matrix)
{
QTriangleSet triangleSet;
-#if 0
- if (QOpenGLExtensions::glExtensions() & QOpenGLExtensions::ElementIndexUint) {
+ if (hasElementIndexUint()) {
QTriangulator<quint32> triangulator;
triangulator.initialize(polygon, count, hint, matrix);
QVertexSet<quint32> vertexSet = triangulator.triangulate();
@@ -2521,13 +2529,12 @@ Q_GUI_EXPORT QTriangleSet qTriangulate(const qreal *polygon,
triangleSet.indices.setDataUint(vertexSet.indices);
} else {
-#endif
QTriangulator<quint16> triangulator;
triangulator.initialize(polygon, count, hint, matrix);
QVertexSet<quint16> vertexSet = triangulator.triangulate();
triangleSet.vertices = vertexSet.vertices;
triangleSet.indices.setDataUshort(vertexSet.indices);
-// }
+ }
return triangleSet;
}
@@ -2535,21 +2542,19 @@ Q_GUI_EXPORT QTriangleSet qTriangulate(const QVectorPath &path,
const QTransform &matrix, qreal lod)
{
QTriangleSet triangleSet;
-#if 0
- if (QOpenGLExtensions::glExtensions() & QOpenGLExtensions::ElementIndexUint) {
+ if (hasElementIndexUint()) {
QTriangulator<quint32> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint32> vertexSet = triangulator.triangulate();
triangleSet.vertices = vertexSet.vertices;
triangleSet.indices.setDataUint(vertexSet.indices);
} else {
-#endif
QTriangulator<quint16> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint16> vertexSet = triangulator.triangulate();
triangleSet.vertices = vertexSet.vertices;
triangleSet.indices.setDataUshort(vertexSet.indices);
-// }
+ }
return triangleSet;
}
@@ -2557,21 +2562,19 @@ QTriangleSet qTriangulate(const QPainterPath &path,
const QTransform &matrix, qreal lod)
{
QTriangleSet triangleSet;
-#if 0
- if (QOpenGLExtensions::glExtensions() & QOpenGLExtensions::ElementIndexUint) {
+ if (hasElementIndexUint()) {
QTriangulator<quint32> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint32> vertexSet = triangulator.triangulate();
triangleSet.vertices = vertexSet.vertices;
triangleSet.indices.setDataUint(vertexSet.indices);
} else {
-#endif
QTriangulator<quint16> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint16> vertexSet = triangulator.triangulate();
triangleSet.vertices = vertexSet.vertices;
triangleSet.indices.setDataUshort(vertexSet.indices);
-// }
+ }
return triangleSet;
}
@@ -2579,21 +2582,19 @@ QPolylineSet qPolyline(const QVectorPath &path,
const QTransform &matrix, qreal lod)
{
QPolylineSet polyLineSet;
-#if 0
- if (QOpenGLExtensions::glExtensions() & QOpenGLExtensions::ElementIndexUint) {
+ if (hasElementIndexUint()) {
QTriangulator<quint32> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint32> vertexSet = triangulator.polyline();
polyLineSet.vertices = vertexSet.vertices;
polyLineSet.indices.setDataUint(vertexSet.indices);
} else {
-#endif
QTriangulator<quint16> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint16> vertexSet = triangulator.polyline();
polyLineSet.vertices = vertexSet.vertices;
polyLineSet.indices.setDataUshort(vertexSet.indices);
-// }
+ }
return polyLineSet;
}
@@ -2601,21 +2602,19 @@ QPolylineSet qPolyline(const QPainterPath &path,
const QTransform &matrix, qreal lod)
{
QPolylineSet polyLineSet;
-#if 0
- if (QOpenGLExtensions::glExtensions() & QOpenGLExtensions::ElementIndexUint) {
+ if (hasElementIndexUint()) {
QTriangulator<quint32> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint32> vertexSet = triangulator.polyline();
polyLineSet.vertices = vertexSet.vertices;
polyLineSet.indices.setDataUint(vertexSet.indices);
} else {
-#endif
QTriangulator<quint16> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint16> vertexSet = triangulator.polyline();
polyLineSet.vertices = vertexSet.vertices;
polyLineSet.indices.setDataUshort(vertexSet.indices);
-// }
+ }
return polyLineSet;
}