diff options
Diffstat (limited to 'tests/auto/threed/qglsection/tst_qglsection.cpp')
-rw-r--r-- | tests/auto/threed/qglsection/tst_qglsection.cpp | 674 |
1 files changed, 0 insertions, 674 deletions
diff --git a/tests/auto/threed/qglsection/tst_qglsection.cpp b/tests/auto/threed/qglsection/tst_qglsection.cpp deleted file mode 100644 index 726a995b..00000000 --- a/tests/auto/threed/qglsection/tst_qglsection.cpp +++ /dev/null @@ -1,674 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** 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 <QtTest/QtTest> -#include "qglsection_p.h" -#include "qglbuilder.h" -#include "qgeometrydata.h" -#include "qtest_helpers.h" -#include "qvector3darray.h" - -class tst_QGLSection : public QObject -{ - Q_OBJECT -public: - tst_QGLSection() {} - ~tst_QGLSection() {} - void testSmooth(QGLSection *sec, QGLBuilder *builder); - void testFaceted(QGLSection *sec, QGLBuilder *builder); - -private slots: - void create(); - void modify(); - void append(); - void appendSmooth(); - void appendSmoothMap(); - void appendFaceted(); - void appendFacetedMap(); - void accumNormals(); - void normalizedNormals(); - void appendTexCoord(); - void appendColor(); - void accessors(); -}; - -// Indices in a QGLIndexArray are int on desktop, ushort on OpenGL/ES. -// This macro works around the discrepancy to avoid confusing QCOMPARE. -#define QCOMPARE_INDEX(x,y) QCOMPARE(int(x), int(y)) - -class QGLSectionTest : public QGLSection -{ -public: - QGLSectionTest(QGLBuilder *builder, QGL::Smoothing s = QGL::Smooth) - : QGLSection(builder, s) {} - - void appendSmooth(const QLogicalVertex &vertex) - { - QGLSection::appendSmooth(vertex); - } - - void appendFaceted(const QLogicalVertex &vertex) - { - QGLSection::appendFaceted(vertex); - } - - void append(const QLogicalVertex &vertex) - { - QGLSection::append(vertex); - } -}; - -class TestBuilder : public QGLBuilder -{ -public: - QGLSection *currentSection() { return QGLBuilder::currentSection(); } - QList<QGLSection*> sections() { return QGLBuilder::sections(); } -}; - -static void addGeometry(TestBuilder &builder) -{ - QVector3D va(-1.0f, -1.0f, 0.0f); - QVector3D vb(1.0f, -1.0f, 0.0f); - QVector3D vc(1.0f, 1.0f, 0.0f); - QGeometryData p; - p.appendVertex(va, vb, vc); - builder.addTriangles(p); -} - -void tst_QGLSection::create() -{ - // Test that a newly created object has the correct defaults. - TestBuilder builder; - builder.newSection(); - QGLSection *section = builder.currentSection(); - QVERIFY(section->hasField(QGL::Position)); // need this initially now - QCOMPARE(section->fields(), (quint32)1); - QCOMPARE(section->smoothing(), QGL::Smooth); - QCOMPARE(section->count(), 0); - QCOMPARE(section->boundingBox(), QBox3D()); - QCOMPARE(section->mapThreshold(), 5); - - // suppress warning - addGeometry(builder); - builder.finalizedSceneNode(); -} - -void tst_QGLSection::modify() -{ - TestBuilder builder; - builder.newSection(); - QGLSection *section = builder.currentSection(); - - QVector3D va(-1.0f, -1.0f, 0.0f); - QVector3D vb(1.0f, -1.0f, 0.0f); - QVector3D vc(1.0f, 1.0f, 0.0f); - QVector3D n(0.0f, 0.0f, 1.0f); - QGeometryData p; - p.appendVertex(va, vb, vc); - p.appendNormal(n, n, n); - section->setMapThreshold(30); - QCOMPARE(section->mapThreshold(), 30); - builder.addTriangles(p); - QCOMPARE(section->count(), 3); - builder.newSection(); - QGLSection *section2 = builder.currentSection(); - builder.addTriangles(p); - QCOMPARE(section2->count(), 3); - - // suppress warning - builder.finalizedSceneNode(); -} - -void tst_QGLSection::append() -{ - TestBuilder builder; - builder.newSection(); - QGLSection *section = builder.currentSection(); - - QVector3D testVertex(1.234f, 2.345f, 3.456f); - QVector3D testNormal(1.0f, 0.0f, 0.0f); - QLogicalVertex vx(testVertex, testNormal); - section->append(vx); - QCOMPARE(section->vertices().count(), 1); - QCOMPARE(section->vertices().at(0), testVertex); - QCOMPARE(section->normals().count(), 1); - QCOMPARE(section->normals().at(0), testNormal); - QCOMPARE(section->indices().size(), 1); - QCOMPARE(section->texCoords().count(), 0); - QCOMPARE(section->colors().count(), 0); - - // suppress warning - builder.finalizedSceneNode(); -} - -void tst_QGLSection::appendSmooth() -{ - TestBuilder builder; - QGLSectionTest *section = new QGLSectionTest(&builder); - testSmooth(section, &builder); - - // suppress warning - builder.finalizedSceneNode(); -} - -void tst_QGLSection::appendSmoothMap() -{ - TestBuilder builder; - QGLSectionTest *section = new QGLSectionTest(&builder); - int t = section->mapThreshold(); - QVector3D testVertex(-12.34f, -23.45f, -34.56f); - QVector3D incrVector(0.02, 0.02, 0.02); - QVector3D testNormal(1.0f, 0.0f, 0.0f); - for (int i = 0; i < (t - 2); ++i) - { - section->appendSmooth(QLogicalVertex(testVertex, testNormal)); - testVertex += incrVector; - } - testSmooth(section, &builder); - - // suppress warning - builder.finalizedSceneNode(); -} - -void tst_QGLSection::testSmooth(QGLSection *section, QGLBuilder *builder) -{ - int poffset = section->count(QGL::Position); - int noffset = section->count(QGL::Normal); - - // append a vertex - check it appears in the data along with its normal - QVector3D testVertex(1.234f, 2.345f, 3.456f); - QVector3D testNormal(4.321f, 5.432f, 6.543f); - section->appendSmooth(QLogicalVertex(testVertex, testNormal)); - QCOMPARE(section->vertices().count(), poffset + 1); - QCOMPARE(section->vertices().at(poffset + 0), testVertex); - QCOMPARE(section->normals().count(), noffset + 1); - QCOMPARE(section->normals().at(noffset + 0), testNormal); - QCOMPARE(section->indices().size(), poffset + 1); - QCOMPARE_INDEX(section->indices()[poffset + 0], poffset + 0); - - // append a vertex equal to one already appended - check it was coalesced - QVector3D testNormal2(0.0f, 0.0f, 1.0f); - QVector3D result = testNormal + testNormal2; // QVector3D(0.0f, 0.0f, 7.543f); - section->appendSmooth(QLogicalVertex(testVertex, testNormal2)); - QCOMPARE(section->vertices().count(), poffset + 1); - QCOMPARE(section->vertices().at(poffset + 0), testVertex); - QCOMPARE(section->normals().count(), noffset + 1); - QCOMPARE(section->normals().at(noffset + 0), result); - QCOMPARE(section->indices().size(), poffset + 2); - QCOMPARE_INDEX(section->indices()[poffset + 1], poffset + 0); - - // append a new different vertex - check it is not coalesced - QVector3D testVertex2(-1.234f, -2.345f, -3.456f); - QVector3D testNormal3(-4.321f, -5.432f, -6.543f); - section->appendSmooth(QLogicalVertex(testVertex2, testNormal3)); - QCOMPARE(section->vertices().count(), poffset + 2); - QCOMPARE(section->vertices().at(poffset + 1), testVertex2); - QCOMPARE(section->normals().count(), noffset + 2); - QCOMPARE(section->normals().at(noffset + 1), testNormal3); - QCOMPARE(section->indices().size(), poffset + 3); - QCOMPARE_INDEX(section->indices()[poffset + 2], poffset + 1); - - // append a vertex equal to one already appended, but inside a new section - check its not coalesced - section = new QGLSectionTest(builder); - section->appendSmooth(QLogicalVertex(testVertex2, testNormal3)); - QCOMPARE(section->vertices().count(), 1); - QCOMPARE(section->vertices().at(0), testVertex2); - QCOMPARE(section->normals().count(), 1); - QCOMPARE(section->normals().at(0), testNormal3); - QCOMPARE(section->indices().size(), 1); - QCOMPARE_INDEX(section->indices()[0], 0); -} - -void tst_QGLSection::appendFaceted() -{ - TestBuilder builder; - QGLSectionTest *section = new QGLSectionTest(&builder); - // test the part where its only using the QArray - testFaceted(section, &builder); - - // suppress warning - builder.finalizedSceneNode(); -} - -void tst_QGLSection::appendFacetedMap() -{ - TestBuilder builder; - QGLSectionTest *section = new QGLSectionTest(&builder); - // now create a new section and fill to just below the threshold for QMap - int t = section->mapThreshold(); - QVector3D testVertex(-12.34f, -23.45f, -34.56f); - QVector3D incrVector(0.02, 0.02, 0.02); - QVector3D testNormal(1.0f, 0.0f, 0.0f); - for (int i = 0; i < (t - 2); ++i) - { - section->appendSmooth(QLogicalVertex(testVertex, testNormal)); - testVertex += incrVector; - } - testFaceted(section, &builder); - - // suppress warning - builder.finalizedSceneNode(); -} - -void tst_QGLSection::accumNormals() -{ - /* - This mesh is a cap that could be the top of a sphere - its a central - quad in the z = 1 plane, with x = 1, y = 1 as the bottom-left corner; - with four more quads above, below, to the left and to the right, as - viewed looking down the -ve z axis (plan view). The four quads around - the central one join one one edge (in the z = 1 plane) and on the opp. - edge slope down to the z = 0 plane. The four corners are filled in - with triangles, so that the whole figure looks like an octagon in plan. - - plan view - x/y plane: - ^ ---------- - | / | | \ - y / | | \ - /___|_____|____\ - | | | | - | | | | - |____|_____|_____| - \ |* | / - \ | | / - \ | | / - ---------- --> x - - side view - x/z plane: - ________ z = 1 - / |* | \ - / | | \ - / | | \ - ----------------- z = 0 - - The normals smoothing should make this as "round" as possible. - - Each quad of course, is actually divided from bottom-left to top-right - into two triangles (not shown in the ascii art for clarity). The total - number of triangles in the rendered result should be 14. - - At the vertex marked with the asterisk - #3 in the data below - there - are 5 triangular faces contributing normals to the smoothed sum. The - quad on the top has two co-planar triangles, and _each_ of those has - a normal equal to (0, 0, 1) - only one of these should be summed. - The other triangles are 1/2 of the two neighbouring quads - one has a - normal of (-1, 0, 1) the other (0, -1, 1) - and the corner triangle - which has a normal of (-1, -1, 1). - - The normalized sum of these is roughly (-0.4, -0.4, 0.8). - - If the normal from the extra triangle is erroneously included then - the normalized sum is roughly (-0.35, -0.35, 0.87). - - The resulting normal is pulled more in the z-direction. - - In general if a a flat plane is broken up into a large number of - triangles, they can bias the normal calculation. In a model often - this can occur where triangulation algorithms produce degenerate - solutions with many triangles converging on a point. - - This test is to cover this problem. - */ - TestBuilder builder; - builder.newSection(QGL::Smooth); // default - but making the point - //QGLSection *section = builder.currentSection(); - QGLSceneNode *node = builder.currentNode(); - static float data[12*3] = { - 1.0f, 0.0f, 0.0f, - 2.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, - 1.0f, 1.0f, 1.0f, - 2.0f, 1.0f, 1.0f, - 3.0f, 1.0f, 0.0f, - 0.0f, 2.0f, 0.0f, - 1.0f, 2.0f, 1.0f, - 2.0f, 2.0f, 1.0f, - 3.0f, 2.0f, 0.0f, - 1.0f, 3.0f, 0.0f, - 2.0f, 3.0f, 0.0f - }; - QVector3DArray v = QVector3DArray::fromRawData((const QVector3D *)data, 12); - QGeometryData quads; - quads.appendVertex(v[0], v[1], v[4], v[3]); // 0 - quads.appendVertex(v[2], v[3], v[7], v[6]); // 1 - quads.appendVertex(v[3], v[4], v[8], v[7]); // 2 - quads.appendVertex(v[4], v[5], v[9], v[8]); // 3 - quads.appendVertex(v[7], v[8], v[11], v[10]); // 4 - builder.addQuads(quads); - QGeometryData triangles; - triangles.appendVertex(v[0], v[3], v[2]); // 5 - triangles.appendVertex(v[1], v[5], v[4]); // 6 - triangles.appendVertex(v[6], v[7], v[10]); // 7 - triangles.appendVertex(v[8], v[9], v[11]); // 8 - builder.addTriangles(triangles); - builder.finalizedSceneNode(); - - // There are 9 faces as shown above - here are their normals - QVector3DArray face_norms; - face_norms.extend(9); - face_norms[0] = QVector3D(0, -1, 1); - face_norms[1] = QVector3D(-1, 0, 1); - face_norms[2] = QVector3D(0, 0, 1); - face_norms[3] = QVector3D(1, 0, 1); - face_norms[4] = QVector3D(0, 1, 1); - face_norms[5] = QVector3D(-1, -1, 1); - face_norms[6] = QVector3D(1, -1, 1); - face_norms[7] = QVector3D(-1, 1, 1); - face_norms[8] = QVector3D(1, 1, 1); - //for (int i = 0; i < 9; ++i) - // face_norms[i].normalize(); - - QVector3DArray expected; - expected.extend(12); - expected[0] = face_norms[0] + face_norms[5]; - expected[1] = face_norms[0] + face_norms[6]; - expected[4] = face_norms[1] + face_norms[5]; - expected[3] = face_norms[0] + face_norms[1] + face_norms[2] + face_norms[5]; - expected[2] = face_norms[0] + face_norms[2] + face_norms[3] + face_norms[6]; - expected[8] = face_norms[3] + face_norms[6]; - expected[6] = face_norms[1] + face_norms[7]; - expected[5] = face_norms[1] + face_norms[2] + face_norms[4] + face_norms[7]; - expected[7] = face_norms[2] + face_norms[3] + face_norms[4] + face_norms[8]; - expected[9] = face_norms[3] + face_norms[8]; - expected[11] = face_norms[4] + face_norms[7]; - expected[10] = face_norms[4] + face_norms[8]; - for (int i = 0; i < 12; ++i) - expected[i].normalize(); - - QGeometryData res = node->geometry(); - QCOMPARE(res.count(QGL::Position), 12); - QCOMPARE(res.count(QGL::Normal), 12); - QCOMPARE(res.indexCount(), 14 * 3); - QCOMPARE(res.vertexAt(0), v[0]); - QCOMPARE(res.vertexAt(4), v[2]); - QCOMPARE(res.vertexAt(7), v[8]); - QCOMPARE(res.vertexAt(11), v[10]); - QCOMPARE(res.normalAt(0), expected.at(0)); - QCOMPARE(res.normalAt(1), expected.at(1)); - QCOMPARE(res.normalAt(2), expected.at(2)); - QCOMPARE(res.normalAt(3), expected.at(3)); - QCOMPARE(res.normalAt(4), expected.at(4)); - QCOMPARE(res.normalAt(5), expected.at(5)); - QCOMPARE(res.normalAt(6), expected.at(6)); - QCOMPARE(res.normalAt(7), expected.at(7)); - QCOMPARE(res.normalAt(8), expected.at(8)); - QCOMPARE(res.normalAt(9), expected.at(9)); - QCOMPARE(res.normalAt(10), expected.at(10)); - QCOMPARE(res.normalAt(11), expected.at(11)); -} - -void tst_QGLSection::normalizedNormals() -{ - const qreal qRadius = 1.0f; - const qreal qHeight = 0.6f; - const qreal qThickness = 0.4f; - const int qNumSlices = 16; - - TestBuilder builder; - builder.newSection(QGL::Smooth); // default - but making the point - //QGLSection *section = builder.currentSection(); - QGLSceneNode *node = builder.currentNode(); - - // draw two 90 degree arcs, qThickness apart radially, and qHeight apart - // in the z dimension. the points on the two arcs are joined into quads - // but all the points on the high arc are joined to one single point in - // the same z plane. - QVector3D ap(qRadius, 0.0f, 0.0f); - QVector3D bp(qRadius + qThickness, 0.0f, qHeight); - QVector3D anc(qRadius * 2.0f, qRadius *2.0f, qHeight); - for (int slice = 1; slice < qNumSlices; ++slice) - { - const qreal pi2 = 2.0 * M_PI; - qreal angle = (slice * pi2) / (4 * qNumSlices); - qreal cs = qCos(angle); - qreal sn = qSin(angle); - QVector3D a(cs * qRadius, sn * qRadius, 0.0f); - QVector3D b(cs * (qRadius + qThickness), sn * (qRadius + qThickness), qHeight); - QGeometryData quad; - quad.appendVertex(ap, bp, b, a); - builder.addQuads(quad); - QGeometryData tri; - tri.appendVertex(b, bp, anc); - builder.addTriangles(tri); - ap = a; - bp = b; - } - builder.finalizedSceneNode(); - QGeometryData data = node->geometry(); - QVERIFY(!data.isNull()); - QCOMPARE(data.count(QGL::Position), 33); -} - -void tst_QGLSection::testFaceted(QGLSection *section, QGLBuilder *builder) -{ - int poffset = section->count(QGL::Position); - int noffset = section->count(QGL::Normal); - - // append a vertex - check it appears in the data along with its normal - QVector3D testVertex(1.234f, 2.345f, 3.456f); - QVector3D testNormal(4.321f, 5.432f, 6.543f); - section->appendFaceted(QLogicalVertex(testVertex, testNormal)); - QCOMPARE(section->vertices().count(), poffset + 1); - QCOMPARE(section->vertices().at(poffset + 0), testVertex); - QCOMPARE(section->normals().count(), noffset + 1); - QCOMPARE(section->normals().at(noffset + 0), testNormal); - QCOMPARE(section->indices().size(), poffset + 1); - QCOMPARE_INDEX(section->indices()[poffset + 0], poffset + 0); - - // append a vertex equal to one already appended, but with different normal - check it was NOT coalesced - QVector3D testNormal2(0.0f, 0.0f, 1.0f); - section->appendFaceted(QLogicalVertex(testVertex, testNormal2)); - QCOMPARE(section->vertices().count(), poffset + 2); - QCOMPARE(section->vertices().at(poffset + 1), testVertex); - QCOMPARE(section->normals().count(), noffset + 2); - QCOMPARE(section->normals().at(noffset + 1), testNormal2); - QCOMPARE(section->indices().size(), poffset + 2); - QCOMPARE_INDEX(section->indices()[poffset + 1], poffset + 1); - - // append a vertex equal to one already appended, but with same normal - check it WAS coalesced - section->appendFaceted(QLogicalVertex(testVertex, testNormal2)); - QCOMPARE(section->vertices().count(), poffset + 2); - QCOMPARE(section->vertices().at(poffset + 1), testVertex); - QCOMPARE(section->normals().count(), noffset + 2); - QCOMPARE(section->normals().at(noffset + 1), testNormal2); - QCOMPARE(section->indices().size(), poffset + 3); - QCOMPARE_INDEX(section->indices()[poffset + 2], poffset + 1); - - // append a vertex equal to one already appended, with same normal, BUT in a new section - check it was NOT coalesced - section = new QGLSectionTest(builder); - section->appendFaceted(QLogicalVertex(testVertex, testNormal2)); - QCOMPARE(section->vertices().count(), 1); - QCOMPARE(section->vertices().at(0), testVertex); - QCOMPARE(section->normals().count(), 1); - QCOMPARE(section->normals().at(0), testNormal2); - QCOMPARE(section->indices().size(), 1); - QCOMPARE_INDEX(section->indices()[0], 0); -} - -void tst_QGLSection::appendTexCoord() -{ - TestBuilder builder; - QGLSectionTest *section = new QGLSectionTest(&builder); - - // note that the tests above do the case of texCoord, InvalidTexCoord - - // append a texture - check it appears in the data at the correct index - QVector3D testVertex(1.234f, 2.345f, 3.456f); - QVector3D testNormal(4.321f, 5.432f, 6.543f); - QVector2D testTexCoord(0.0f, 0.0f); - section->appendSmooth(QLogicalVertex(testVertex, testNormal, testTexCoord)); - QCOMPARE(section->vertices().count(), 1); - QCOMPARE(section->vertices().at(0), testVertex); - QCOMPARE(section->normals().count(), 1); - QCOMPARE(section->normals().at(0), testNormal); - QCOMPARE(section->texCoords().count(), 1); - QCOMPARE(section->texCoords().at(0), testTexCoord); - QCOMPARE(section->indices().size(), 1); - QCOMPARE_INDEX(section->indices()[0], 0); - - // append same texture - will coalesce and index the vert - section->appendSmooth(QLogicalVertex(testVertex, testNormal, testTexCoord)); - QCOMPARE(section->vertices().count(), 1); - QCOMPARE(section->vertices().at(0), testVertex); - QCOMPARE(section->normals().count(), 1); - QCOMPARE(section->normals().at(0), testNormal); - QCOMPARE(section->texCoords().count(), 1); - QCOMPARE(section->texCoords().at(0), testTexCoord); - QCOMPARE(section->indices().size(), 2); - QCOMPARE_INDEX(section->indices()[1], 0); - - // new vertex created to carry the updated texture coord, even though - // the normal and vertex are the same and thus the logical vert would - // otherwise coalesced - the new vert is a copy (same vert and normal) - QVector2D testTexCoord2(1.0, 1.0); - section->appendSmooth(QLogicalVertex(testVertex, testNormal, testTexCoord2)); - QCOMPARE(section->vertices().count(), 2); - QCOMPARE(section->vertices().at(1), testVertex); - QCOMPARE(section->normals().count(), 2); - QCOMPARE(section->normals().at(1), testNormal); - QCOMPARE(section->texCoords().count(), 2); - QCOMPARE(section->texCoords().at(1), testTexCoord2); - QCOMPARE(section->indices().size(), 3); - QCOMPARE_INDEX(section->indices()[2], 1); - - section = new QGLSectionTest(&builder); - - // append a faceted vertex with a tex coord check it appears in the data - // in a new section now, so the same vert and normal wont be coalesced - section->appendFaceted(QLogicalVertex(testVertex, testNormal, testTexCoord)); - QCOMPARE(section->vertices().count(), 1); - QCOMPARE(section->vertices().at(0), testVertex); - QCOMPARE(section->normals().count(), 1); - QCOMPARE(section->normals().at(0), testNormal); - QCOMPARE(section->texCoords().count(), 1); - QCOMPARE(section->texCoords().at(0), testTexCoord); - QCOMPARE(section->indices().size(), 1); - QCOMPARE_INDEX(section->indices()[0], 0); - - // append a vertex & normal equal to one already appended, but with different tex coord - // check it was NOT coalesced, dup vert created - section->appendFaceted(QLogicalVertex(testVertex, testNormal, testTexCoord2)); - QCOMPARE(section->vertices().count(), 2); - QCOMPARE(section->vertices().at(1), testVertex); - QCOMPARE(section->normals().count(), 2); - QCOMPARE(section->normals().at(1), testNormal); - QCOMPARE(section->texCoords().count(), 2); - QCOMPARE(section->texCoords().at(1), testTexCoord2); - QCOMPARE(section->indices().size(), 2); - QCOMPARE_INDEX(section->indices()[1], 1); - - // append a vertex equal to first one appended above, with same normal, and - // same texture - check it WAS coalesced to index 0 - section->appendFaceted(QLogicalVertex(testVertex, testNormal, testTexCoord)); - QCOMPARE(section->vertices().count(), 2); - QCOMPARE(section->vertices().at(1), testVertex); - QCOMPARE(section->normals().count(), 2); - QCOMPARE(section->normals().at(1), testNormal); - QCOMPARE(section->texCoords().count(), 2); - QCOMPARE(section->texCoords().at(1), testTexCoord2); - QCOMPARE(section->indices().size(), 3); - QCOMPARE_INDEX(section->indices()[2], 0); - - QVERIFY(section->hasField(QGL::Normal)); - QVERIFY(section->hasField(QGL::TextureCoord0)); - QVERIFY(!section->hasField(QGL::Color)); - - // suppress warning - builder.finalizedSceneNode(); -} - -void tst_QGLSection::appendColor() -{ - TestBuilder builder; - QGLSectionTest *section = new QGLSectionTest(&builder); - - QColor4ub color(32, 64, 128, 255); - QVector3D testVertex(1.234f, 2.345f, 3.456f); - section->append(QLogicalVertex(testVertex, color)); - QCOMPARE(section->vertices().count(), 1); - QCOMPARE(section->vertices().at(0), testVertex); - QCOMPARE(section->colors().count(), 1); - QCOMPARE(section->colors().at(0), color); - - QVERIFY(section->hasField(QGL::Color)); - QVERIFY(!section->hasField(QGL::TextureCoord0)); - QVERIFY(!section->hasField(QGL::Normal)); - - section = new QGLSectionTest(&builder); - - QVector2D testTexCoord(0.0f, 0.0f); - QLogicalVertex lv; - lv.setVertex(testVertex); - lv.setColor(color); - lv.setTexCoord(testTexCoord); - section->append(lv); - QCOMPARE(section->vertices().count(), 1); - QCOMPARE(section->vertices().at(0), testVertex); - QCOMPARE(section->colors().count(), 1); - QCOMPARE(section->colors().at(0), color); - QCOMPARE(section->texCoords().count(), 1); - QCOMPARE(section->texCoords().at(0), testTexCoord); - - QVERIFY(section->hasField(QGL::Color)); - QVERIFY(section->hasField(QGL::TextureCoord0)); - QVERIFY(!section->hasField(QGL::Normal)); - - // suppress warning - builder.finalizedSceneNode(); -} - -void tst_QGLSection::accessors() -{ - TestBuilder builder; - QGLSectionTest *section = new QGLSectionTest(&builder); - - QCOMPARE(section->smoothing(), QGL::Smooth); - - QGLSectionTest *section2 = new QGLSectionTest(&builder, QGL::Faceted); - QCOMPARE(section2->smoothing(), QGL::Faceted); - - // suppress warning - builder.finalizedSceneNode(); -} - -QTEST_APPLESS_MAIN(tst_QGLSection) - -#include "tst_qglsection.moc" |