summaryrefslogtreecommitdiffstats
path: root/src/threed/arrays/qcustomdataarray.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/threed/arrays/qcustomdataarray.cpp')
-rw-r--r--src/threed/arrays/qcustomdataarray.cpp909
1 files changed, 0 insertions, 909 deletions
diff --git a/src/threed/arrays/qcustomdataarray.cpp b/src/threed/arrays/qcustomdataarray.cpp
deleted file mode 100644
index aaacfe98..00000000
--- a/src/threed/arrays/qcustomdataarray.cpp
+++ /dev/null
@@ -1,909 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation ([email protected])
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qcustomdataarray.h"
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QCustomDataArray
- \brief The QCustomDataArray class is a polymorphic array of data values suitable for use in 3D applications.
- \since 4.8
- \ingroup qt3d
- \ingroup qt3d::arrays
-
- QArray is an efficient storage mechanism for vertex attributes.
- However, there are some situations where the element type of a custom
- vertex attribute is not known until runtime. QCustomDataArray is
- intended for use in those situations. It has a small performance
- penalty compared to QArray to achieve polymorphism.
-
- The elements that may be stored in a QCustomDataArray are limited
- to a few types: float, QVector2D, QVector3D, QVector4D, and
- QColor4ub. This provides a reasonable range of efficient use
- cases without overloading the API. QArray can be used on
- any type, but is restricted to types that are known at compile time.
-
- Like QArray, QCustomDataArray uses implicit sharing and
- copy-on-write semantics to support passing large arrays around
- an application with little overhead.
-
- \sa QArray
-*/
-
-/*!
- \enum QCustomDataArray::ElementType
- This enum defines the element type within a QCustomDataArray.
-
- \value Float The elements are of type float.
- \value Vector2D The elements are of type QVector2D.
- \value Vector3D The elements are of type QVector3D.
- \value Vector4D The elements are of type QVector4D.
- \value Color The elements are of type QColor4ub, which consists of
- four unsigned bytes. To represent colors as four floating-point
- values, use Vector4D as the element type.
-*/
-
-/*!
- \fn QCustomDataArray::QCustomDataArray()
-
- Constructs an empty custom data array. The elementType() will
- initially be QCustomDataArray::Float, which can be changed with a
- call to setElementType() before the elements are appended.
-
- \sa setElementType(), append()
-*/
-
-/*!
- Constructs an empty custom data array with elements represented
- by the specified \a type.
-
- \sa setElementType()
-*/
-QCustomDataArray::QCustomDataArray(QCustomDataArray::ElementType type)
-{
- setElementType(type);
-}
-
-/*!
- Constructs an empty custom data array with elements represented
- by the specified \a type. The array is initially resized to \a size;
- filling all elements with zeroes.
-
- \sa setElementType(), resize()
-*/
-QCustomDataArray::QCustomDataArray(QCustomDataArray::ElementType type, int size)
-{
- setElementType(type);
- resize(size);
-}
-
-/*!
- \fn QCustomDataArray::QCustomDataArray(const QCustomDataArray& other)
-
- Constructs a copy of \a other.
-*/
-
-/*!
- Constructs a copy of the floating-point QArray \a other.
-
- The elementType() will be set to QCustomDataArray::Float.
-
- \sa toFloatArray()
-*/
-QCustomDataArray::QCustomDataArray(const QArray<float>& other)
- : m_array(other),
- m_elementType(QCustomDataArray::Float),
- m_elementComponents(1)
-{
-}
-
-/*!
- Constructs a copy of the 2D vector QArray \a other.
-
- The elementType() will be set to QCustomDataArray::Vector2D.
-
- This constructor needs to make a complete copy of the data
- in \a other so it may be expensive performance-wise.
-
- \sa toVector2DArray()
-*/
-QCustomDataArray::QCustomDataArray(const QArray<QVector2D>& other)
- : m_elementType(QCustomDataArray::Vector2D),
- m_elementComponents(2)
-{
- int size = other.size();
- if (size > 0) {
- const QVector2D *src = other.constData();
- float *dst = m_array.extend(size * 2);
- qMemCopy(dst, src, size * sizeof(QVector2D));
- }
-}
-
-/*!
- Constructs a copy of the 3D vector QArray \a other.
-
- The elementType() will be set to QCustomDataArray::Vector3D.
-
- This constructor needs to make a complete copy of the data
- in \a other so it may be expensive performance-wise.
-
- \sa toVector3DArray()
-*/
-QCustomDataArray::QCustomDataArray(const QArray<QVector3D>& other)
- : m_elementType(QCustomDataArray::Vector3D),
- m_elementComponents(3)
-{
- int size = other.size();
- if (size > 0) {
- const QVector3D *src = other.constData();
- float *dst = m_array.extend(size * 3);
- qMemCopy(dst, src, size * sizeof(QVector3D));
- }
-}
-
-/*!
- Constructs a copy of the 4D vector QArray \a other.
-
- The elementType() will be set to QCustomDataArray::Vector4D.
-
- This constructor needs to make a complete copy of the data
- in \a other so it may be expensive performance-wise.
-
- \sa toVector3DArray()
-*/
-QCustomDataArray::QCustomDataArray(const QArray<QVector4D>& other)
- : m_elementType(QCustomDataArray::Vector4D),
- m_elementComponents(4)
-{
- int size = other.size();
- if (size > 0) {
- const QVector4D *src = other.constData();
- float *dst = m_array.extend(size * 4);
- qMemCopy(dst, src, size * sizeof(QVector4D));
- }
-}
-
-/*!
- Constructs a copy of the color QArray \a other.
-
- The elementType() will be set to QCustomDataArray::Color.
-
- This constructor needs to make a complete copy of the data
- in \a other so it may be expensive performance-wise.
-
- \sa toColorArray()
-*/
-QCustomDataArray::QCustomDataArray(const QArray<QColor4ub>& other)
- : m_elementType(QCustomDataArray::Color),
- m_elementComponents(1)
-{
- int size = other.size();
- qMemCopy(m_array.extend(size), other.constData(), sizeof(QColor4ub) * size);
-}
-
-/*!
- \fn QCustomDataArray::~QCustomDataArray()
-
- Destroys this custom data array.
-*/
-
-/*!
- \fn QCustomDataArray& QCustomDataArray::operator=(const QCustomDataArray& other)
-
- Assigns \a other to this custom data array and returns a reference
- to this custom data array.
-
- The previous elementType() for this custom data array will be
- replaced with the type from \a other. The element data is assigned
- directly without conversion.
-*/
-
-/*!
- \fn QCustomDataArray::ElementType QCustomDataArray::elementType() const
-
- Returns the representation type of elements in this custom data array.
-
- \sa setElementType()
-*/
-
-/*!
- Sets the representation \a type of elements in this custom data array.
- The array must be empty to change the element type.
-
- \sa elementType(), append()
-*/
-void QCustomDataArray::setElementType(QCustomDataArray::ElementType type)
-{
- Q_ASSERT(m_array.isEmpty());
- m_elementType = type;
- switch (type) {
- case QCustomDataArray::Float:
- m_elementComponents = 1;
- break;
- case QCustomDataArray::Vector2D:
- m_elementComponents = 2;
- break;
- case QCustomDataArray::Vector3D:
- m_elementComponents = 3;
- break;
- case QCustomDataArray::Vector4D:
- m_elementComponents = 4;
- break;
- case QCustomDataArray::Color:
- m_elementComponents = 1; // 4 bytes packed into a float.
- break;
- default:
- Q_ASSERT_X(false, "QCustomDataArray::setElementType",
- "unknown element type");
- m_elementComponents = 1;
- break;
- }
-}
-
-/*!
- \fn int QCustomDataArray::size() const
-
- Returns the number of elements in this custom data array.
-
- \sa resize(), capacity(), isEmpty()
-*/
-
-/*!
- \fn int QCustomDataArray::count() const
-
- Same as size(); provided for convenience.
-*/
-
-/*!
- \fn int QCustomDataArray::capacity() const
-
- Returns the number of elements that can be stored in this
- custom data array before reallocation.
-
- \sa reserve(), size()
-*/
-
-/*!
- \fn bool QCustomDataArray::isEmpty() const
-
- Returns true if this data array is empty; false otherwise.
-
- \sa size(), clear()
-*/
-
-/*!
- \fn int QCustomDataArray::elementSize() const
-
- Returns the size of individual elements in this custom data
- array, in bytes. For example, the element size of an array
- containing QVector3D values will be 3 * sizeof(float),
- normally 12.
-
- \sa setElementType()
-*/
-
-/*!
- \fn void QCustomDataArray::clear()
-
- Clears all elements from this custom data array and sets the size to zero.
-
- This function will deallocate any memory that is used on the heap
- to store the custom data array's elements. To reuse the same memory
- as before, call resize() with an argument of zero.
-
- \sa resize(), isEmpty()
-*/
-
-/*!
- \fn void QCustomDataArray::resize(int size)
-
- Sets the size of the custom data array to \a size. If \a size is greater
- than the current size, elements are added to the end; the new elements
- are initialized with all-zeroes. If \a size is less than the current
- size, elements are removed from the end.
-
- \sa size(), reserve(), squeeze()
-*/
-
-/*!
- \fn void QCustomDataArray::reserve(int size)
-
- Increases the capacity of this custom data array to reserve space for
- at least \a size elements. If the capacity is already larger
- than \a size, this function does nothing; in particular, it does
- not remove elements from the array like resize() does.
-
- This function can be useful when you know how roughly many elements
- will be appended ahead of time. Reserving the space once can avoid
- unnecessary realloc operations later.
-
- \sa capacity(), resize(), squeeze()
-*/
-
-/*!
- \fn void QCustomDataArray::squeeze()
-
- Releases any memory not required to store the custom data array's
- elements by reducing its capacity() to size().
-
- This function is intended for reclaiming memory in a custom data
- array that is being used over and over with different contents.
- As elements are added to a custom data array, it will be constantly
- expanded in size. This function can realloc the custom data array
- to a smaller size to reclaim unused memory.
-
- \sa reserve(), capacity()
-*/
-
-/*!
- Returns the value of the element at \a index in this custom
- data array as a QVariant.
-
- Color elements are returned as a QVariant containing a
- QColor4ub, not a QColor.
-
- \sa setAt(), append(), floatAt(), vector2DAt(), vector3DAt()
- \sa vector4DAt(), colorAt()
-*/
-QVariant QCustomDataArray::at(int index) const
-{
- Q_ASSERT(index >= 0 && index < size());
-
- const float *data;
- switch (m_elementType) {
-
- case QCustomDataArray::Float:
- return QVariant(m_array.at(index));
-
- case QCustomDataArray::Vector2D:
- data = m_array.constData() + index * 2;
- return qVariantFromValue(QVector2D(data[0], data[1]));
-
- case QCustomDataArray::Vector3D:
- data = m_array.constData() + index * 3;
- return qVariantFromValue(QVector3D(data[0], data[1], data[2]));
-
- case QCustomDataArray::Vector4D:
- data = m_array.constData() + index * 4;
- return qVariantFromValue
- (QVector4D(data[0], data[1], data[2], data[3]));
-
- case QCustomDataArray::Color:
- data = m_array.constData() + index;
- return qVariantFromValue
- (QColor4ub::fromRaw(reinterpret_cast<const uchar *>(data)));
-
- default: break;
- }
- return QVariant();
-}
-
-/*!
- Sets the element at \a index in this custom data array to \a value.
-
- The type of \a value must be consistent with elementType().
- The two exceptions to this are that a Float value can be
- specified by either a float or double QVariant, and a Color
- value can be specified as either a QColor4ub or QColor QVariant.
-
- \sa at(), elementType()
-*/
-void QCustomDataArray::setAt(int index, const QVariant& value)
-{
- Q_ASSERT(index >= 0 && index < size());
-
- switch (value.type()) {
-
- case (QVariant::Type)QMetaType::Float:
- Q_ASSERT(m_elementType == QCustomDataArray::Float);
- m_array[index] = value.toFloat();
- break;
-
- case QVariant::Double:
- // Convert Double into Float.
- Q_ASSERT(m_elementType == QCustomDataArray::Float);
- m_array[index] = float(value.toDouble());
- break;
-
- case QVariant::Vector2D:
- Q_ASSERT(m_elementType == QCustomDataArray::Vector2D);
- *(reinterpret_cast<QVector2D *>(m_array.data() + index * 2))
- = qVariantValue<QVector2D>(value);
- break;
-
- case QVariant::Vector3D:
- Q_ASSERT(m_elementType == QCustomDataArray::Vector3D);
- *(reinterpret_cast<QVector3D *>(m_array.data() + index * 3))
- = qVariantValue<QVector3D>(value);
- break;
-
- case QVariant::Vector4D:
- Q_ASSERT(m_elementType == QCustomDataArray::Vector4D);
- *(reinterpret_cast<QVector4D *>(m_array.data() + index * 4))
- = qVariantValue<QVector4D>(value);
- break;
-
- case QVariant::Color:
- // Convert QColor into QColor4ub.
- Q_ASSERT(m_elementType == QCustomDataArray::Color);
- *(reinterpret_cast<QColor4ub *>(m_array.data() + index))
- = QColor4ub(qVariantValue<QColor>(value));
- break;
-
- case QVariant::UserType:
- if (value.userType() == qMetaTypeId<QColor4ub>()) {
- Q_ASSERT(m_elementType == QCustomDataArray::Color);
- *(reinterpret_cast<QColor4ub *>(m_array.data() + index))
- = qVariantValue<QColor4ub>(value);
- break;
- }
- // Fall through.
-
- default:
- Q_ASSERT_X(false, "QCustomDataArray::setAt",
- "QVariant type not supported for elements");
- break;
- }
-}
-
-/*!
- \fn void QCustomDataArray::setAt(int index, qreal x)
- \overload
-
- Sets the floating-point element at \a index in this custom data
- array to \a x. The elementType() must be QCustomDataArray::Float.
-
- \sa at(), elementType(), floatAt()
-*/
-
-/*!
- \fn void QCustomDataArray::setAt(int index, qreal x, qreal y)
- \overload
-
- Sets the 2D vector element at \a index in this custom
- data array to (\a x, \a y). The elementType() must be
- QCustomDataArray::Vector2D.
-
- \sa at(), elementType(), vector2DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::setAt(int index, qreal x, qreal y, qreal z)
- \overload
-
- Sets the 3D vector element at \a index in this custom
- data array to (\a x, \a y, \a z). The elementType() must be
- QCustomDataArray::Vector3D.
-
- \sa at(), elementType(), vector3DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::setAt(int index, qreal x, qreal y, qreal z, qreal w)
- \overload
-
- Sets the 4D vector element at \a index in this custom
- data array to (\a x, \a y, \a z, \a w). The elementType() must be
- QCustomDataArray::Vector4D.
-
- \sa at(), elementType(), vector4DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::setAt(int index, const QVector2D& value)
- \overload
-
- Sets the 2D vector element at \a index in this custom
- data array to \a value. The elementType() must be
- QCustomDataArray::Vector2D.
-
- \sa at(), elementType(), vector2DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::setAt(int index, const QVector3D& value)
- \overload
-
- Sets the 3D vector element at \a index in this custom
- data array to \a value. The elementType() must be
- QCustomDataArray::Vector3D.
-
- \sa at(), elementType(), vector3DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::setAt(int index, const QVector4D& value)
- \overload
-
- Sets the 4D vector element at \a index in this custom
- data array to \a value. The elementType() must be
- QCustomDataArray::Vector4D.
-
- \sa at(), elementType(), vector4DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::setAt(int index, const QColor4ub& value)
- \overload
-
- Sets the color element at \a index in this custom data array to \a value.
- The elementType() must be QCustomDataArray::Color.
-
- \sa at(), elementType(), colorAt()
-*/
-
-/*!
- \fn void QCustomDataArray::setAt(int index, Qt::GlobalColor value)
- \overload
-
- Sets the color element at \a index in this custom data array to \a value.
- The elementType() must be QCustomDataArray::Color.
-
- \sa at(), elementType(), colorAt()
-*/
-
-/*!
- \fn qreal QCustomDataArray::floatAt(int index) const
-
- Returns the floating-point element at \a index in this custom data array.
- The elementType() must be QCustomDataArray::Float.
-
- \sa at(), setAt(), elementType()
-*/
-
-/*!
- \fn QVector2D QCustomDataArray::vector2DAt(int index) const
-
- Returns the 2D vector element at \a index in this custom data array.
- The elementType() must be QCustomDataArray::Vector2D.
-
- \sa at(), setAt(), elementType()
-*/
-
-/*!
- \fn QVector3D QCustomDataArray::vector3DAt(int index) const
-
- Returns the 3D vector element at \a index in this custom data array.
- The elementType() must be QCustomDataArray::Vector3D.
-
- \sa at(), setAt(), elementType()
-*/
-
-/*!
- \fn QVector4D QCustomDataArray::vector4DAt(int index) const
-
- Returns the 4D vector element at \a index in this custom data array.
- The elementType() must be QCustomDataArray::Vector4D.
-
- \sa at(), setAt(), elementType()
-*/
-
-/*!
- \fn QColor4ub QCustomDataArray::colorAt(int index) const
-
- Returns the color element at \a index in this custom data array.
- The elementType() must be QCustomDataArray::Color.
-
- \sa at(), setAt(), elementType()
-*/
-
-/*!
- \fn void QCustomDataArray::append(qreal x)
- \overload
-
- Appends the floating-point value \a x to this custom data array.
- The elementType() must be QCustomDataArray::Float.
-
- \sa setAt(), floatAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(qreal x, qreal y)
- \overload
-
- Appends the 2D vector value (\a x, \a y) to this custom data array.
- The elementType() must be QCustomDataArray::Vector2D.
-
- \sa setAt(), vector2DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(qreal x, qreal y, qreal z)
- \overload
-
- Appends the 3D vector value (\a x, \a y, \a z) to this custom
- data array. The elementType() must be QCustomDataArray::Vector3D.
-
- \sa setAt(), vector3DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(qreal x, qreal y, qreal z, qreal w)
- \overload
-
- Appends the 4D vector value (\a x, \a y, \a z, \a w) to this custom
- data array. The elementType() must be QCustomDataArray::Vector4D.
-
- \sa setAt(), vector4DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(const QVector2D& value)
- \overload
-
- Appends the 2D vector \a value to this custom data array.
- The elementType() must be QCustomDataArray::Vector2D.
-
- \sa setAt(), vector2DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(const QVector3D& value)
- \overload
-
- Appends the 3D vector \a value to this custom data array.
- The elementType() must be QCustomDataArray::Vector3D.
-
- \sa setAt(), vector3DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(const QVector4D& value)
- \overload
-
- Appends the 4D vector \a value to this custom data array.
- The elementType() must be QCustomDataArray::Vector4D.
-
- \sa setAt(), vector4DAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(const QColor4ub& value)
- \overload
-
- Appends the color \a value to this custom data array.
- The elementType() must be QCustomDataArray::Color.
-
- \sa setAt(), colorAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(Qt::GlobalColor value)
- \overload
-
- Appends the color \a value to this custom data array.
- The elementType() must be QCustomDataArray::Color.
-
- \sa setAt(), colorAt()
-*/
-
-/*!
- \fn void QCustomDataArray::append(const QCustomDataArray &array)
- \overload
-
- Appends the values in \a array to this custom data array. This
- custom data array must have the same element type as \a array,
- unless this custom data array is empty - in which case the
- element type and data of \a array will be assigned to this.
-*/
-
-/*!
- Appends \a value to this custom data array.
-
- The type of \a value must be consistent with elementType().
- The two exceptions to this are that a Float value can be
- specified by either a float or double QVariant, and a Color
- value can be specified as either a QColor4ub or QColor QVariant.
-
- \sa at(), setAt(), elementType()
-*/
-void QCustomDataArray::append(const QVariant& value)
-{
- switch (value.type()) {
-
- case (QVariant::Type)QMetaType::Float:
- Q_ASSERT(m_elementType == QCustomDataArray::Float);
- m_array.append(value.toFloat());
- break;
-
- case QVariant::Double:
- // Convert Double into Float.
- Q_ASSERT(m_elementType == QCustomDataArray::Float);
- m_array.append(float(value.toDouble()));
- break;
-
- case QVariant::Vector2D:
- append(qVariantValue<QVector2D>(value));
- break;
-
- case QVariant::Vector3D:
- append(qVariantValue<QVector3D>(value));
- break;
-
- case QVariant::Vector4D:
- append(qVariantValue<QVector4D>(value));
- break;
-
- case QVariant::Color:
- // Convert QColor into QColor4ub.
- append(QColor4ub(qVariantValue<QColor>(value)));
- break;
-
- case QVariant::UserType:
- if (value.userType() == qMetaTypeId<QColor4ub>()) {
- append(qVariantValue<QColor4ub>(value));
- break;
- }
- // Fall through.
-
- default:
- Q_ASSERT_X(false, "QCustomDataArray::append",
- "QVariant type not supported for elements");
- break;
- }
-}
-
-/*!
- Returns the contents of this custom data array as a QArray
- of float values.
-
- The elementType() must be QCustomDataArray::Float.
-*/
-QArray<float> QCustomDataArray::toFloatArray() const
-{
- Q_ASSERT(m_elementType == QCustomDataArray::Float);
- return m_array;
-}
-
-/*!
- Returns the contents of this custom data array as a QArray
- of QVector2D values.
-
- The elementType() must be QCustomDataArray::Vector2D.
-
- This function needs to make a complete copy of the data
- in this array so it may be expensive performance-wise.
-*/
-QArray<QVector2D> QCustomDataArray::toVector2DArray() const
-{
- Q_ASSERT(m_elementType == QCustomDataArray::Vector2D);
- int size = m_array.size() / 2;
- QArray<QVector2D> result;
- if (size > 0) {
- QVector2D *dst = result.extend(size);
- const float *src = m_array.constData();
- qMemCopy(dst, src, size * sizeof(QVector2D));
- }
- return result;
-}
-
-/*!
- Returns the contents of this custom data array as a QArray
- of QVector3D values.
-
- The elementType() must be QCustomDataArray::Vector3D.
-
- This function needs to make a complete copy of the data
- in this array so it may be expensive performance-wise.
-*/
-QArray<QVector3D> QCustomDataArray::toVector3DArray() const
-{
- Q_ASSERT(m_elementType == QCustomDataArray::Vector3D);
- int size = m_array.size() / 3;
- QArray<QVector3D> result;
- if (size > 0) {
- QVector3D *dst = result.extend(size);
- const float *src = m_array.constData();
- qMemCopy(dst, src, size * sizeof(QVector3D));
- }
- return result;
-}
-
-/*!
- Returns the contents of this custom data array as a QArray
- of QVector4D values.
-
- The elementType() must be QCustomDataArray::Vector4D.
-
- This function needs to make a complete copy of the data
- in this array so it may be expensive performance-wise.
-*/
-QArray<QVector4D> QCustomDataArray::toVector4DArray() const
-{
- Q_ASSERT(m_elementType == QCustomDataArray::Vector4D);
- int size = m_array.size() / 4;
- QArray<QVector4D> result;
- if (size > 0) {
- QVector4D *dst = result.extend(size);
- const float *src = m_array.constData();
- qMemCopy(dst, src, size * sizeof(QVector4D));
- }
- return result;
-}
-
-/*!
- Returns the contents of this custom data array as a QArray
- of QColor4ub values.
-
- The elementType() must be QCustomDataArray::Color.
-
- This function needs to make a complete copy of the data
- in this array so it may be expensive performance-wise.
-*/
-QArray<QColor4ub> QCustomDataArray::toColorArray() const
-{
- Q_ASSERT(m_elementType == QCustomDataArray::Color);
- int size = m_array.size();
- QArray<QColor4ub> result;
- result.reserve(size);
- const QColor4ub *data =
- reinterpret_cast<const QColor4ub *>(m_array.constData());
- for (int index = 0; index < size; ++index)
- result.append(*data++);
- return result;
-}
-
-/*!
- \fn const void *QCustomDataArray::data() const
-
- Returns a const pointer to the data stored in the custom data array.
- The pointer can be used to access the items in the custom data array.
- The pointer remains valid as long as the custom data array isn't
- reallocated.
-
- This function is mostly useful to pass a custom data array to a function
- that accepts a plain C++ array.
-*/
-
-#ifndef QT_NO_DEBUG_STREAM
-Q_QT3D_EXPORT QDebug operator<<(QDebug dbg, const QCustomDataArray &array)
-{
- dbg << "QCustomDataArray" << &array << " -- count:" << array.count();
- for (int i = 0; i < array.count(); ++i)
- dbg << array.at(i);
- return dbg;
-}
-#endif
-
-
-QT_END_NAMESPACE