summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-03 13:37:31 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-03 14:34:08 +0300
commit28777a99f79bc9db1a28e1b93080b005be03353b (patch)
tree763125ff45a0866cea220150094809a61472a9e4 /tests
parent2af50e5903f631137117879a7d7945ec006e14ce (diff)
Allow setting volume subtexture along any axis
Change-Id: Iafaac6bd2106253bec913d1d9ee8a3f40e339adf Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/volumetrictest/logo_no_padding.pngbin0 -> 2278 bytes
-rw-r--r--tests/volumetrictest/main.cpp10
-rw-r--r--tests/volumetrictest/volumetrictest.cpp74
-rw-r--r--tests/volumetrictest/volumetrictest.h3
-rw-r--r--tests/volumetrictest/volumetrictest.qrc1
5 files changed, 80 insertions, 8 deletions
diff --git a/tests/volumetrictest/logo_no_padding.png b/tests/volumetrictest/logo_no_padding.png
new file mode 100644
index 00000000..714234aa
--- /dev/null
+++ b/tests/volumetrictest/logo_no_padding.png
Binary files differ
diff --git a/tests/volumetrictest/main.cpp b/tests/volumetrictest/main.cpp
index e838c43a..ba5ba6d3 100644
--- a/tests/volumetrictest/main.cpp
+++ b/tests/volumetrictest/main.cpp
@@ -26,6 +26,7 @@
#include <QtWidgets/QSlider>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QLabel>
+#include <QtWidgets/QPushButton>
#include <QtGui/QScreen>
int main(int argc, char **argv)
@@ -93,6 +94,9 @@ int main(int argc, char **argv)
sliceImageYLabel->setScaledContents(true);
sliceImageZLabel->setScaledContents(true);
+ QPushButton *testSubTextureSetting = new QPushButton(widget);
+ testSubTextureSetting->setText(QStringLiteral("Test subtexture settings"));
+
vLayout->addWidget(fpsLabel);
vLayout->addWidget(sliceXCheckBox);
vLayout->addWidget(sliceXSlider);
@@ -102,8 +106,8 @@ int main(int argc, char **argv)
vLayout->addWidget(sliceImageYLabel);
vLayout->addWidget(sliceZCheckBox);
vLayout->addWidget(sliceZSlider);
- vLayout->addWidget(sliceImageZLabel, 1, Qt::AlignTop);
-
+ vLayout->addWidget(sliceImageZLabel);
+ vLayout->addWidget(testSubTextureSetting, 1, Qt::AlignTop);
VolumetricModifier *modifier = new VolumetricModifier(graph);
modifier->setFpsLabel(fpsLabel);
@@ -121,6 +125,8 @@ int main(int argc, char **argv)
&VolumetricModifier::adjustSliceY);
QObject::connect(sliceZSlider, &QSlider::valueChanged, modifier,
&VolumetricModifier::adjustSliceZ);
+ QObject::connect(testSubTextureSetting, &QPushButton::clicked, modifier,
+ &VolumetricModifier::testSubtextureSetting);
widget->show();
return app.exec();
diff --git a/tests/volumetrictest/volumetrictest.cpp b/tests/volumetrictest/volumetrictest.cpp
index 53b0a875..555cc286 100644
--- a/tests/volumetrictest/volumetrictest.cpp
+++ b/tests/volumetrictest/volumetrictest.cpp
@@ -168,7 +168,67 @@ void VolumetricModifier::handleFpsChange()
// const QString sceneDimensionsFormat = QStringLiteral("%1 x %2");
// m_fpsLabel->setText(sceneDimensionsFormat
// .arg(m_graph->scene()->viewport().width())
-// .arg(m_graph->scene()->viewport().height()));
+ // .arg(m_graph->scene()->viewport().height()));
+}
+
+void VolumetricModifier::testSubtextureSetting()
+{
+ // Setting the rendered Slice as subtexture should result in identical volume
+ QVector<uchar> dataBefore = *m_volumeItem->textureData();
+ dataBefore[0] = dataBefore.at(0); // Make sure we are detached
+
+ checkRenderCase(1, Qt::XAxis, 56, dataBefore, m_volumeItem);
+ checkRenderCase(2, Qt::YAxis, 64, dataBefore, m_volumeItem);
+ checkRenderCase(3, Qt::ZAxis, 87, dataBefore, m_volumeItem);
+
+ checkRenderCase(4, Qt::XAxis, 0, dataBefore, m_volumeItem);
+ checkRenderCase(5, Qt::YAxis, 0, dataBefore, m_volumeItem);
+ checkRenderCase(6, Qt::ZAxis, 0, dataBefore, m_volumeItem);
+
+ checkRenderCase(7, Qt::XAxis, m_volumeItem->textureWidth() - 1, dataBefore, m_volumeItem);
+ checkRenderCase(8, Qt::YAxis, m_volumeItem->textureHeight() - 1, dataBefore, m_volumeItem);
+ checkRenderCase(9, Qt::ZAxis, m_volumeItem->textureDepth() - 1, dataBefore, m_volumeItem);
+
+ dataBefore = *m_volumeItem2->textureData();
+ dataBefore[0] = dataBefore.at(0); // Make sure we are detached
+
+ checkRenderCase(11, Qt::XAxis, 56, dataBefore, m_volumeItem2);
+ checkRenderCase(12, Qt::YAxis, 64, dataBefore, m_volumeItem2);
+ checkRenderCase(13, Qt::ZAxis, 87, dataBefore, m_volumeItem2);
+
+ checkRenderCase(14, Qt::XAxis, 0, dataBefore, m_volumeItem2);
+ checkRenderCase(15, Qt::YAxis, 0, dataBefore, m_volumeItem2);
+ checkRenderCase(16, Qt::ZAxis, 0, dataBefore, m_volumeItem2);
+
+ checkRenderCase(17, Qt::XAxis, m_volumeItem2->textureWidth() - 1, dataBefore, m_volumeItem2);
+ checkRenderCase(18, Qt::YAxis, m_volumeItem2->textureHeight() - 1, dataBefore, m_volumeItem2);
+ checkRenderCase(19, Qt::ZAxis, m_volumeItem2->textureDepth() - 1, dataBefore, m_volumeItem2);
+
+ // Do some visible swaps on volume 3
+ QImage slice = m_volumeItem3->renderSlice(Qt::XAxis, 144);
+ slice = slice.mirrored();
+ m_volumeItem3->setSubTextureData(Qt::XAxis, 144, slice);
+
+ slice = m_volumeItem3->renderSlice(Qt::YAxis, 80);
+ slice = slice.mirrored();
+ m_volumeItem3->setSubTextureData(Qt::YAxis, 80, slice);
+
+ slice = m_volumeItem3->renderSlice(Qt::ZAxis, 190);
+ slice = slice.mirrored(true, false);
+ m_volumeItem3->setSubTextureData(Qt::ZAxis, 190, slice);
+}
+
+void VolumetricModifier::checkRenderCase(int id, Qt::Axis axis, int index,
+ const QVector<uchar> &dataBefore,
+ QCustom3DVolume *volumeItem)
+{
+ QImage slice = volumeItem->renderSlice(axis, index);
+ volumeItem->setSubTextureData(axis, index, slice);
+
+ if (dataBefore == *volumeItem->textureData())
+ qDebug() << __FUNCTION__ << "Case:" << id << "Vectors identical";
+ else
+ qDebug() << __FUNCTION__ << "Case:" << id << "BUG: VECTORS DIFFER!";
}
void VolumetricModifier::createVolume()
@@ -179,7 +239,8 @@ void VolumetricModifier::createVolume()
m_volumeItem->setPosition(QVector3D(-0.5f, 0.6f, 0.0f));
QImage logo;
- logo.load(QStringLiteral(":/logo.png"));
+ logo.load(QStringLiteral(":/logo_no_padding.png"));
+ //logo.load(QStringLiteral(":/logo.png"));
qDebug() << "image dimensions:" << logo.width() << logo.height()
<< logo.byteCount() << (logo.width() * logo.height())
<< logo.bytesPerLine();
@@ -233,7 +294,7 @@ void VolumetricModifier::createVolume()
// Change one picture using subtexture replacement
QImage flipped = logo.mirrored();
- m_volumeItem->setSubTextureData(100, flipped);
+ m_volumeItem->setSubTextureData(Qt::ZAxis, 100, flipped);
// Clean up the two extra pixels
p = data + width - 1;
@@ -331,7 +392,8 @@ void VolumetricModifier::createAnotherVolume()
m_volumeItem2->setPosition(QVector3D(0.5f, -0.5f, 0.0f));
QImage logo;
- logo.load(QStringLiteral(":/logo.png"));
+ logo.load(QStringLiteral(":/logo_no_padding.png"));
+ //logo.load(QStringLiteral(":/logo.png"));
logo = logo.convertToFormat(QImage::Format_ARGB8555_Premultiplied);
qDebug() << "second image dimensions:" << logo.width() << logo.height()
<< logo.byteCount() << (logo.width() * logo.height())
@@ -361,8 +423,8 @@ void VolumetricModifier::createAnotherVolume()
// Change one picture using subtexture replacement
QImage flipped = logo.mirrored();
- m_volumeItem2->setSubTextureData(100, flipped);
- m_volumeItem2->setAlphaMultiplier(0.2f);
+ m_volumeItem2->setSubTextureData(Qt::ZAxis, 100, flipped);
+ //m_volumeItem2->setAlphaMultiplier(0.2f);
m_volumeItem2->setPreserveOpacity(false);
}
diff --git a/tests/volumetrictest/volumetrictest.h b/tests/volumetrictest/volumetrictest.h
index f21fd528..b1b98455 100644
--- a/tests/volumetrictest/volumetrictest.h
+++ b/tests/volumetrictest/volumetrictest.h
@@ -45,11 +45,14 @@ public slots:
void adjustSliceY(int value);
void adjustSliceZ(int value);
void handleFpsChange();
+ void testSubtextureSetting();
private:
void createVolume();
void createAnotherVolume();
void createYetAnotherVolume();
+ void checkRenderCase(int id, Qt::Axis axis, int index, const QVector<uchar> &dataBefore,
+ QCustom3DVolume *volumeItem);
Q3DScatter *m_graph;
QCustom3DVolume *m_volumeItem;
diff --git a/tests/volumetrictest/volumetrictest.qrc b/tests/volumetrictest/volumetrictest.qrc
index 5b9623f0..7cd8533b 100644
--- a/tests/volumetrictest/volumetrictest.qrc
+++ b/tests/volumetrictest/volumetrictest.qrc
@@ -2,5 +2,6 @@
<qresource prefix="/">
<file>logo.png</file>
<file alias="mesh">cubeFilledFlat.obj</file>
+ <file>logo_no_padding.png</file>
</qresource>
</RCC>