diff options
Diffstat (limited to 'src/declarative/scenegraph/coreapi')
-rw-r--r-- | src/declarative/scenegraph/coreapi/qsggeometry.cpp | 39 | ||||
-rw-r--r-- | src/declarative/scenegraph/coreapi/qsggeometry.h | 18 |
2 files changed, 52 insertions, 5 deletions
diff --git a/src/declarative/scenegraph/coreapi/qsggeometry.cpp b/src/declarative/scenegraph/coreapi/qsggeometry.cpp index 6b622afd8d..0b17501efc 100644 --- a/src/declarative/scenegraph/coreapi/qsggeometry.cpp +++ b/src/declarative/scenegraph/coreapi/qsggeometry.cpp @@ -45,6 +45,13 @@ QT_BEGIN_NAMESPACE +QSGGeometry::Attribute QSGGeometry::Attribute::create(int attributeIndex, int tupleSize, int primitiveType, bool isPrimitive) +{ + Attribute a = { attributeIndex, tupleSize, primitiveType, isPrimitive, 0 }; + return a; +} + + /*! Convenience function which returns attributes to be used for 2D solid color drawing. @@ -53,7 +60,7 @@ QT_BEGIN_NAMESPACE const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_Point2D() { static Attribute data[] = { - { 0, 2, GL_FLOAT } + QSGGeometry::Attribute::create(0, 2, GL_FLOAT, true) }; static AttributeSet attrs = { 1, sizeof(float) * 2, data }; return attrs; @@ -66,8 +73,8 @@ const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_Point2D() const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_TexturedPoint2D() { static Attribute data[] = { - { 0, 2, GL_FLOAT }, - { 1, 2, GL_FLOAT } + QSGGeometry::Attribute::create(0, 2, GL_FLOAT, true), + QSGGeometry::Attribute::create(1, 2, GL_FLOAT) }; static AttributeSet attrs = { 2, sizeof(float) * 4, data }; return attrs; @@ -80,8 +87,8 @@ const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_TexturedPoint2D( const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_ColoredPoint2D() { static Attribute data[] = { - { 0, 2, GL_FLOAT }, - { 1, 4, GL_UNSIGNED_BYTE } + QSGGeometry::Attribute::create(0, 2, GL_FLOAT, true), + QSGGeometry::Attribute::create(1, 4, GL_UNSIGNED_BYTE) }; static AttributeSet attrs = { 2, 2 * sizeof(float) + 4 * sizeof(char), data }; return attrs; @@ -131,11 +138,33 @@ QSGGeometry::QSGGeometry(const QSGGeometry::AttributeSet &attributes, Q_ASSERT(m_attributes.count > 0); Q_ASSERT(m_attributes.stride > 0); + if (indexType != GL_UNSIGNED_BYTE + && indexType != GL_UNSIGNED_SHORT +#ifndef QT_OPENGL_ES + && indexType != GL_UNSIGNED_INT +#endif + ) { + qFatal("QSGGeometry: Unsupported index type, %x.%s\n", + indexType, + indexType == GL_UNSIGNED_INT ? " GL_UNSIGNED_INT is not supported on OpenGL ES." : ""); + } + + // Because allocate reads m_vertex_count, m_index_count and m_owns_data, these // need to be set before calling allocate... allocate(vertexCount, indexCount); } +/*! + \fn int QSGGeometry::sizeOfIndexType() const + + Returns the byte size of the index type. + + This value is either 1 when index type is GL_UNSIGNED_BYTE or 2 when + index type is GL_UNSIGNED_SHORT. For Desktop OpenGL, GL_UNSIGNED_INT + with the value 4 is also supported. + */ + QSGGeometry::~QSGGeometry() { if (m_owns_data) diff --git a/src/declarative/scenegraph/coreapi/qsggeometry.h b/src/declarative/scenegraph/coreapi/qsggeometry.h index 107cabc506..57d66eb30e 100644 --- a/src/declarative/scenegraph/coreapi/qsggeometry.h +++ b/src/declarative/scenegraph/coreapi/qsggeometry.h @@ -56,11 +56,17 @@ class QSGGeometryData; class Q_DECLARATIVE_EXPORT QSGGeometry { public: + struct Attribute { int position; int tupleSize; int type; + + uint isVertexCoordinate : 1; + uint migrateYourCodeToUseTheCreateFunction: 31; // ### Remove before release + + static Attribute create(int pos, int tupleSize, int primitiveType, bool isPosition = false); }; struct AttributeSet { @@ -133,6 +139,8 @@ public: inline uint *indexDataAsUInt(); inline quint16 *indexDataAsUShort(); + inline int sizeOfIndex() const; + const void *indexData() const; inline const uint *indexDataAsUInt() const; inline const quint16 *indexDataAsUShort() const; @@ -272,6 +280,16 @@ inline const QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2 return (const ColoredPoint2D *) m_data; } +int QSGGeometry::sizeOfIndex() const +{ + if (m_index_type == GL_UNSIGNED_SHORT) return 2; + else if (m_index_type == GL_UNSIGNED_BYTE) return 1; +#ifndef QT_OPENGL_ES + else if (m_index_type == GL_UNSIGNED_INT) return 4; +#endif + return 0; +} + QT_END_NAMESPACE QT_END_HEADER |