summaryrefslogtreecommitdiffstats
path: root/src/runtimerender/Qt3DSRenderEffectSystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender/Qt3DSRenderEffectSystem.cpp')
-rw-r--r--src/runtimerender/Qt3DSRenderEffectSystem.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/runtimerender/Qt3DSRenderEffectSystem.cpp b/src/runtimerender/Qt3DSRenderEffectSystem.cpp
index 6ece380..40f4143 100644
--- a/src/runtimerender/Qt3DSRenderEffectSystem.cpp
+++ b/src/runtimerender/Qt3DSRenderEffectSystem.cpp
@@ -1060,6 +1060,27 @@ struct SEffectSystem : public IEffectSystem
SImage *image = inEffect.getImageById(*theStrPtr);
if (image && image->m_TextureData.m_Texture) {
+ CRegisteredString strU = m_Context->GetStringTable().RegisterStr(
+ QString::fromLatin1(inPropertyName.c_str()) + "TransformU");
+ CRegisteredString strV = m_Context->GetStringTable().RegisterStr(
+ QString::fromLatin1(inPropertyName.c_str()) + "TransformV");
+ qt3ds::render::NVRenderShaderConstantBase *transformU =
+ inShader.GetShaderConstant(strU);
+ qt3ds::render::NVRenderShaderConstantBase *transformV =
+ inShader.GetShaderConstant(strV);
+ image->CalculateTextureTransform();
+ QT3DSMat44 textureTransform = image->m_TextureTransform;
+ if (image->m_TextureData.m_TextureFlags.IsInvertUVCoords()) {
+ QT3DSMat44 invertCoordsMat(QT3DSMat44::createIdentity());
+ invertCoordsMat.scale(QT3DSVec4(1.0f, -1.0f, 1.0f, 1.0f));
+ invertCoordsMat.setPosition(QT3DSVec3(0.0f, 1.0f, 0.0f));
+ textureTransform = textureTransform * invertCoordsMat;
+ }
+ const QT3DSF32 *dataPtr(textureTransform.front());
+ inShader.SetPropertyValue(transformU,
+ QT3DSVec3(dataPtr[0], dataPtr[4], dataPtr[12]));
+ inShader.SetPropertyValue(transformV,
+ QT3DSVec3(dataPtr[1], dataPtr[5], dataPtr[13]));
auto *texture = image->m_TextureData.m_Texture;
texture->SetTextureWrapS(image->m_HorizontalTilingMode);
texture->SetTextureWrapT(image->m_VerticalTilingMode);