summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanne Kangas <janne.kangas@qt.io>2018-12-04 10:53:08 +0200
committerJanne Kangas <janne.kangas@qt.io>2019-01-09 12:21:26 +0000
commit66a48481616126929ae29a30b316a0dc930e3b2c (patch)
tree0a4797adb68fdc86efcdff9ab71554dfee33bcae
parent677fdcca5d0c498a85688180151a0ebaf181cb9a (diff)
Enable horizontal tiling modes on light probe
Change-Id: I42d6a610c65e1e2c30a013b755add9a27d1dfb47 Task-id: QT3DS-2581 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/runtime/q3dsscenemanager.cpp40
-rw-r--r--src/runtime/q3dsuippresentation.cpp11
2 files changed, 47 insertions, 4 deletions
diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp
index 578dd78..97689aa 100644
--- a/src/runtime/q3dsscenemanager.cpp
+++ b/src/runtime/q3dsscenemanager.cpp
@@ -2119,9 +2119,19 @@ void Q3DSSceneManager::setLayerProperties(Q3DSLayerNode *layer3DS)
m_presentation->preferKtx());
data->iblProbeData.lightProbeSampler->setValue(QVariant::fromValue(data->iblProbeData.lightProbeTexture));
- // Image probes force repeat for horizontal repeat
Qt3DRender::QTextureWrapMode wrapMode;
- wrapMode.setX(Qt3DRender::QTextureWrapMode::Repeat);
+
+ switch (layer3DS->lightProbe()->horizontalTiling()) {
+ case Q3DSImage::Tiled:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::Repeat);
+ break;
+ case Q3DSImage::Mirrored:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::MirroredRepeat);
+ break;
+ default:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::ClampToEdge);
+ break;
+ }
switch (layer3DS->lightProbe()->verticalTiling()) {
case Q3DSImage::Tiled:
@@ -5921,7 +5931,19 @@ void Q3DSSceneManager::updateDefaultMaterial(Q3DSDefaultMaterial *m, Q3DSReferen
}
Qt3DRender::QTextureWrapMode wrapMode;
- wrapMode.setX(Qt3DRender::QTextureWrapMode::Repeat);
+
+ switch (iblOverride->horizontalTiling()) {
+ case Q3DSImage::Tiled:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::Repeat);
+ break;
+ case Q3DSImage::Mirrored:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::MirroredRepeat);
+ break;
+ default:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::ClampToEdge);
+ break;
+ }
+
switch (iblOverride->verticalTiling()) {
case Q3DSImage::Tiled:
wrapMode.setY(Qt3DRender::QTextureWrapMode::Repeat);
@@ -6237,6 +6259,18 @@ void Q3DSSceneManager::updateCustomMaterial(Q3DSCustomMaterialInstance *m, Q3DSR
Qt3DRender::QTextureWrapMode wrapMode;
wrapMode.setX(Qt3DRender::QTextureWrapMode::Repeat);
+ switch (iblOverride->horizontalTiling()) {
+ case Q3DSImage::Tiled:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::Repeat);
+ break;
+ case Q3DSImage::Mirrored:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::MirroredRepeat);
+ break;
+ default:
+ wrapMode.setX(Qt3DRender::QTextureWrapMode::ClampToEdge);
+ break;
+ }
+
switch (iblOverride->verticalTiling()) {
case Q3DSImage::Tiled:
wrapMode.setY(Qt3DRender::QTextureWrapMode::Repeat);
diff --git a/src/runtime/q3dsuippresentation.cpp b/src/runtime/q3dsuippresentation.cpp
index 59da42b..bafb313 100644
--- a/src/runtime/q3dsuippresentation.cpp
+++ b/src/runtime/q3dsuippresentation.cpp
@@ -1598,7 +1598,16 @@ void Q3DSImage::setProps(const V &attrs, PropSetFlags flags)
parseProperty(attrs, flags, typeName, QStringLiteral("scaleu"), &m_scaleU);
parseProperty(attrs, flags, typeName, QStringLiteral("scalev"), &m_scaleV);
parseProperty(attrs, flags, typeName, QStringLiteral("mappingmode"), &m_mappingMode);
- parseProperty(attrs, flags, typeName, QStringLiteral("tilingmodehorz"), &m_tilingHoriz);
+ // Legacy behavior for light probes - default is tiled as opposed to ordinary image.
+ // Therefore if a light probe does not have explicit horizontal tiling, set it to tiled.
+ if (m_mappingMode == LightProbe || m_mappingMode == IBLOverride) {
+ bool res = parseProperty(attrs, 0, typeName,
+ QStringLiteral("tilingmodehorz"), &m_tilingHoriz);
+ if (!res)
+ m_tilingHoriz = Tiled;
+ } else {
+ parseProperty(attrs, flags, typeName, QStringLiteral("tilingmodehorz"), &m_tilingHoriz);
+ }
parseProperty(attrs, flags, typeName, QStringLiteral("tilingmodevert"), &m_tilingVert);
parseProperty(attrs, flags, typeName, QStringLiteral("rotationuv"), &m_rotationUV);
parseProperty(attrs, flags, typeName, QStringLiteral("positionu"), &m_positionU);