diff options
-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); |