1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtQuick3D/private/qquick3dreflectionprobe_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrenderreflectionprobe_p.h>
class tst_QQuick3DReflectionProbe : public QObject
{
Q_OBJECT
// Work-around to get access to updateSpatialNode
class ReflectionProbe : public QQuick3DReflectionProbe
{
public:
using QQuick3DReflectionProbe::updateSpatialNode;
};
private slots:
void testProperties();
void testEnums();
};
void tst_QQuick3DReflectionProbe::testProperties()
{
ReflectionProbe probe;
auto node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(nullptr));
const auto originalNode = node;
QVERIFY(node);
probe.setParallaxCorrection(true);
node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(node));
QVERIFY(probe.parallaxCorrection());
QVERIFY(node->parallaxCorrection);
probe.setParallaxCorrection(false);
node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(node));
QVERIFY(!probe.parallaxCorrection());
QVERIFY(!node->parallaxCorrection);
probe.setDebugView(true);
QVERIFY(probe.debugView());
probe.setDebugView(false);
QVERIFY(!probe.debugView());
QVector3D size(20, 40, 60);
probe.setBoxSize(size);
node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(node));
QCOMPARE(size, probe.boxSize());
QCOMPARE(size, node->boxSize);
QVector3D offset(10, 30, 50);
probe.setBoxOffset(offset);
node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(node));
QCOMPARE(offset, probe.boxOffset());
QCOMPARE(offset, node->boxOffset);
QColor clearColor(Qt::black);
probe.setClearColor(clearColor);
node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(node));
QCOMPARE(clearColor, probe.clearColor());
QCOMPARE(clearColor, node->clearColor);
QCOMPARE(originalNode, node);
}
void tst_QQuick3DReflectionProbe::testEnums()
{
ReflectionProbe probe;
auto node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(nullptr));
QVERIFY(node);
auto reflectionQualities = { QQuick3DReflectionProbe::ReflectionQuality::VeryLow,
QQuick3DReflectionProbe::ReflectionQuality::Low,
QQuick3DReflectionProbe::ReflectionQuality::Medium,
QQuick3DReflectionProbe::ReflectionQuality::High,
QQuick3DReflectionProbe::ReflectionQuality::VeryHigh };
const unsigned int mappedResolutions[] = {7, 8, 9, 10, 11};
int idx = 0;
for (const auto quality : reflectionQualities) {
probe.setQuality(quality);
node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(node));
QCOMPARE(quality, probe.quality());
QCOMPARE(mappedResolutions[idx], node->reflectionMapRes);
idx++;
}
auto refreshModes = { QQuick3DReflectionProbe::ReflectionRefreshMode::FirstFrame,
QQuick3DReflectionProbe::ReflectionRefreshMode::EveryFrame };
for (const auto mode : refreshModes) {
probe.setRefreshMode(mode);
node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(node));
QCOMPARE(int(mode), int(probe.refreshMode()));
QCOMPARE(int(mode), int(node->refreshMode));
}
auto timeSlicings = { QQuick3DReflectionProbe::ReflectionTimeSlicing::None,
QQuick3DReflectionProbe::ReflectionTimeSlicing::AllFacesAtOnce,
QQuick3DReflectionProbe::ReflectionTimeSlicing::IndividualFaces };
for (const auto timeSlice : timeSlicings) {
probe.setTimeSlicing(timeSlice);
node = static_cast<QSSGRenderReflectionProbe*>(probe.updateSpatialNode(node));
QCOMPARE(int(timeSlice), int(probe.timeSlicing()));
QCOMPARE(int(timeSlice), int(node->timeSlicing));
}
}
QTEST_APPLESS_MAIN(tst_QQuick3DReflectionProbe)
#include "tst_qquick3dreflectionprobe.moc"
|