diff options
author | Janne Kangas <janne.kangas@qt.io> | 2018-12-04 10:53:08 +0200 |
---|---|---|
committer | Janne Kangas <janne.kangas@qt.io> | 2019-01-09 12:21:26 +0000 |
commit | 66a48481616126929ae29a30b316a0dc930e3b2c (patch) | |
tree | 0a4797adb68fdc86efcdff9ab71554dfee33bcae | |
parent | 677fdcca5d0c498a85688180151a0ebaf181cb9a (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.cpp | 40 | ||||
-rw-r--r-- | src/runtime/q3dsuippresentation.cpp | 11 |
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); |