diff options
author | Samuel Rødal <samuel.rodal@nokia.com> | 2011-09-07 08:40:28 +0200 |
---|---|---|
committer | Gunnar Sletta <gunnar.sletta@nokia.com> | 2011-09-07 08:50:49 +0200 |
commit | c8fcc2929820b5deafc1e84a3bcb719d87028bd6 (patch) | |
tree | 20ebc64cff3a3d4f3747299df89cbd75991d2c30 /src/gui/opengl/qtriangulator.cpp | |
parent | 6119d12d7d7d63b00891e7fa21a5fab6751fb062 (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.cpp | 39 |
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; } |