diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-09-30 13:56:48 +0100 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2016-10-10 05:41:41 +0000 |
commit | 387eebab1ea3b10d777b1c92d04804afb215c52c (patch) | |
tree | 7792825c4c29453f1f4912d1a4cd4b58b5d95514 | |
parent | 533a07838d8d86ec75b86e211c8a167cac23cef0 (diff) | |
download | qt3d-387eebab1ea3b10d777b1c92d04804afb215c52c.tar.gz |
Factor out the geometry test helper functions
They will be needed to test other geometry convenience classes.
Change-Id: Ibece97c393e3b0239454f28e7862cfffd400a0e8
Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
-rw-r--r-- | tests/auto/extras/common/common.pri | 6 | ||||
-rw-r--r-- | tests/auto/extras/common/geometrytesthelper.h | 105 | ||||
-rw-r--r-- | tests/auto/extras/qcuboidgeometry/qcuboidgeometry.pro | 2 | ||||
-rw-r--r-- | tests/auto/extras/qcuboidgeometry/tst_qcuboidgeometry.cpp | 72 |
4 files changed, 114 insertions, 71 deletions
diff --git a/tests/auto/extras/common/common.pri b/tests/auto/extras/common/common.pri new file mode 100644 index 000000000..4f73c65b5 --- /dev/null +++ b/tests/auto/extras/common/common.pri @@ -0,0 +1,6 @@ +HEADERS += \ + $$PWD/geometrytesthelper.h + +INCLUDEPATH += $$PWD + +QT += core-private 3drender diff --git a/tests/auto/extras/common/geometrytesthelper.h b/tests/auto/extras/common/geometrytesthelper.h new file mode 100644 index 000000000..48e674cd9 --- /dev/null +++ b/tests/auto/extras/common/geometrytesthelper.h @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef GEOMETRYTESTHELPER_H +#define GEOMETRYTESTHELPER_H + +#include <Qt3DRender/qattribute.h> +#include <Qt3DRender/qbuffer.h> +#include <Qt3DRender/qbufferdatagenerator.h> +#include <Qt3DRender/qgeometry.h> + +inline void generateGeometry(Qt3DRender::QGeometry &geometry) +{ + // Get all attributes + const QVector<Qt3DRender::QAttribute *> attributes = geometry.attributes(); + + // Get all unique data generators from the buffers referenced by the attributes + QHash<Qt3DRender::QBufferDataGeneratorPtr, Qt3DRender::QBuffer *> dataGenerators; + for (const auto attribute : attributes) { + const auto dataGenerator = attribute->buffer()->dataGenerator(); + if (!dataGenerators.contains(dataGenerator)) + dataGenerators.insert(dataGenerator, attribute->buffer()); + } + + // Generate data for each buffer + const auto end = dataGenerators.end(); + for (auto it = dataGenerators.begin(); it != end; ++it) { + Qt3DRender::QBufferDataGeneratorPtr dataGenerator = it.key(); + const QByteArray data = (*dataGenerator)(); + + Qt3DRender::QBuffer *buffer = it.value(); + buffer->setData(data); + } +} + +template<typename IndexType> +IndexType extractIndexData(Qt3DRender::QAttribute *attribute, int index) +{ + // Get the raw data + const IndexType *typedData = reinterpret_cast<const IndexType *>(attribute->buffer()->data().constData()); + + // Offset into the data taking stride and offset into account + const IndexType indexValue = *(typedData + index); + return indexValue; +} + +template<typename VertexType, typename IndexType> +VertexType extractVertexData(Qt3DRender::QAttribute *attribute, IndexType index) +{ + // Get the raw data + const char *rawData = attribute->buffer()->data().constData(); + + // Offset into the data taking stride and offset into account + const char *vertexData = rawData + (index * attribute->byteStride() + attribute->byteOffset()); + + // Construct vertex from the typed data + VertexType vertex; + const Qt3DRender::QAttribute::VertexBaseType type = attribute->vertexBaseType(); + switch (type) + { + case Qt3DRender::QAttribute::Float: { + const float *typedVertexData = reinterpret_cast<const float *>(vertexData); + const int components = attribute->vertexSize(); + for (int i = 0; i < components; ++i) + vertex[i] = typedVertexData[i]; + break; + + // TODO: Handle other types as needed + } + + default: + qWarning() << "Unhandled type"; + Q_UNREACHABLE(); + break; + } + + return vertex; +} + +#endif // GEOMETRYTESTHELPER_H diff --git a/tests/auto/extras/qcuboidgeometry/qcuboidgeometry.pro b/tests/auto/extras/qcuboidgeometry/qcuboidgeometry.pro index 7208f1c7b..1e55fffad 100644 --- a/tests/auto/extras/qcuboidgeometry/qcuboidgeometry.pro +++ b/tests/auto/extras/qcuboidgeometry/qcuboidgeometry.pro @@ -8,3 +8,5 @@ CONFIG += testcase SOURCES += \ tst_qcuboidgeometry.cpp + +include(../common/common.pri) diff --git a/tests/auto/extras/qcuboidgeometry/tst_qcuboidgeometry.cpp b/tests/auto/extras/qcuboidgeometry/tst_qcuboidgeometry.cpp index fa1657732..973a1d613 100644 --- a/tests/auto/extras/qcuboidgeometry/tst_qcuboidgeometry.cpp +++ b/tests/auto/extras/qcuboidgeometry/tst_qcuboidgeometry.cpp @@ -40,77 +40,7 @@ #include <QtCore/qsharedpointer.h> #include <QSignalSpy> -namespace { - -void generateGeometry(Qt3DRender::QGeometry &geometry) -{ - // Get all attributes - const QVector<Qt3DRender::QAttribute *> attributes = geometry.attributes(); - - // Get all unique data generators from the buffers referenced by the attributes - QHash<Qt3DRender::QBufferDataGeneratorPtr, Qt3DRender::QBuffer *> dataGenerators; - for (const auto attribute : attributes) { - const auto dataGenerator = attribute->buffer()->dataGenerator(); - if (!dataGenerators.contains(dataGenerator)) - dataGenerators.insert(dataGenerator, attribute->buffer()); - } - - // Generate data for each buffer - const auto end = dataGenerators.end(); - for (auto it = dataGenerators.begin(); it != end; ++it) { - Qt3DRender::QBufferDataGeneratorPtr dataGenerator = it.key(); - const QByteArray data = (*dataGenerator)(); - - Qt3DRender::QBuffer *buffer = it.value(); - buffer->setData(data); - } -} - -template<typename IndexType> -IndexType extractIndexData(Qt3DRender::QAttribute *attribute, int index) -{ - // Get the raw data - const IndexType *typedData = reinterpret_cast<const IndexType *>(attribute->buffer()->data().constData()); - - // Offset into the data taking stride and offset into account - const IndexType indexValue = *(typedData + index); - return indexValue; -} - -template<typename VertexType, typename IndexType> -VertexType extractVertexData(Qt3DRender::QAttribute *attribute, IndexType index) -{ - // Get the raw data - const char *rawData = attribute->buffer()->data().constData(); - - // Offset into the data taking stride and offset into account - const char *vertexData = rawData + (index * attribute->byteStride() + attribute->byteOffset()); - - // Construct vertex from the typed data - VertexType vertex; - const Qt3DRender::QAttribute::VertexBaseType type = attribute->vertexBaseType(); - switch (type) - { - case Qt3DRender::QAttribute::Float: { - const float *typedVertexData = reinterpret_cast<const float *>(vertexData); - const int components = attribute->vertexSize(); - for (int i = 0; i < components; ++i) - vertex[i] = typedVertexData[i]; - break; - - // TODO: Handle other types as needed - } - - default: - qWarning() << "Unhandled type"; - Q_UNREACHABLE(); - break; - } - - return vertex; -} - -} +#include "geometrytesthelper.h" class tst_QCuboidGeometry : public QObject { |