summaryrefslogtreecommitdiffstats
path: root/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2019-04-12 14:24:32 +0300
committerFrederik Gladhorn <frederik.gladhorn@qt.io>2019-04-29 14:44:37 +0000
commite97f897eca6d48fa16d2402f17f3aea5f0816ece (patch)
tree7ca16f305e8396be43462a9fec78b56801d0f29b /src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
parent1040c4cc4bee2cdca543ced6e4cd2a0504de8767 (diff)
Add clipping to distance field fonts
Removes fallback to the old text renderer and adds the clipping feature to the distance field font renderer. Task-number: QT3DS-3329 Change-Id: Ie41b93c9a9ed791297349007c7e2b3bf10c982b1 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp')
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp67
1 files changed, 32 insertions, 35 deletions
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
index 2940f088..e1086304 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
@@ -383,44 +383,41 @@ namespace render {
inText.CalculateMVPAndNormalMatrix(inViewProjection, theMVP, theNormalMatrix);
SRenderableObject *theRenderable = nullptr;
+
#if QT_VERSION >= QT_VERSION_CHECK(5,12,2)
- // TODO: Implement clipping for the distance field renderer
- if (inText.m_WordWrap != TextWordWrap::Clip || (inText.m_BoundingBox.x == 0.0f
- && inText.m_BoundingBox.y == 0.0f)) {
- QT3DSMat44 modelView = (inProjection.getInverse() * inViewProjection)
- * inText.m_GlobalTransform;
- Q3DSDistanceFieldRenderer *distanceFieldText
- = static_cast<Q3DSDistanceFieldRenderer *>(
- m_Renderer.GetQt3DSContext().getDistanceFieldRenderer());
- theRenderable = RENDER_FRAME_NEW(SDistanceFieldRenderable)(
- theFlags, inText.GetGlobalPos(), inText, inText.m_Bounds, theMVP,
- modelView, *distanceFieldText);
- } else
+ QT3DSMat44 modelView = (inProjection.getInverse() * inViewProjection)
+ * inText.m_GlobalTransform;
+ Q3DSDistanceFieldRenderer *distanceFieldText
+ = static_cast<Q3DSDistanceFieldRenderer *>(
+ m_Renderer.GetQt3DSContext().getDistanceFieldRenderer());
+ theRenderable = RENDER_FRAME_NEW(SDistanceFieldRenderable)(
+ theFlags, inText.GetGlobalPos(), inText, inText.m_Bounds, theMVP,
+ modelView, *distanceFieldText);
+#else
+ TTPathObjectAndTexture theResult
+ = theTextRenderer->RenderText(inText, inTextScaleFactor);
+ inText.m_TextTexture = theResult.second.second.mPtr;
+ inText.m_TextTextureDetails = theResult.second.first;
+ inText.m_PathFontItem = theResult.first.second;
+ inText.m_PathFontDetails = theResult.first.first;
+ STextScaleAndOffset theScaleAndOffset(*inText.m_TextTexture,
+ inText.m_TextTextureDetails, inText);
+ QT3DSVec2 theTextScale(theScaleAndOffset.m_TextScale);
+ QT3DSVec2 theTextOffset(theScaleAndOffset.m_TextOffset);
+ QT3DSVec3 minimum(theTextOffset[0] - theTextScale[0],
+ theTextOffset[1] - theTextScale[1], 0);
+ QT3DSVec3 maximum(theTextOffset[0] + theTextScale[0],
+ theTextOffset[1] + theTextScale[1], 0);
+ inText.m_Bounds = NVBounds3(minimum, maximum);
+
+ if (inText.m_PathFontDetails)
+ ioFlags.SetRequiresStencilBuffer(true);
+
+ theRenderable = RENDER_FRAME_NEW(STextRenderable)(
+ theFlags, inText.GetGlobalPos(), m_Renderer, inText, inText.m_Bounds, theMVP,
+ inViewProjection, *inText.m_TextTexture, theTextOffset, theTextScale);
#endif
- {
- TTPathObjectAndTexture theResult
- = theTextRenderer->RenderText(inText, inTextScaleFactor);
- inText.m_TextTexture = theResult.second.second.mPtr;
- inText.m_TextTextureDetails = theResult.second.first;
- inText.m_PathFontItem = theResult.first.second;
- inText.m_PathFontDetails = theResult.first.first;
- STextScaleAndOffset theScaleAndOffset(*inText.m_TextTexture,
- inText.m_TextTextureDetails, inText);
- QT3DSVec2 theTextScale(theScaleAndOffset.m_TextScale);
- QT3DSVec2 theTextOffset(theScaleAndOffset.m_TextOffset);
- QT3DSVec3 minimum(theTextOffset[0] - theTextScale[0],
- theTextOffset[1] - theTextScale[1], 0);
- QT3DSVec3 maximum(theTextOffset[0] + theTextScale[0],
- theTextOffset[1] + theTextScale[1], 0);
- inText.m_Bounds = NVBounds3(minimum, maximum);
-
- if (inText.m_PathFontDetails)
- ioFlags.SetRequiresStencilBuffer(true);
- theRenderable = RENDER_FRAME_NEW(STextRenderable)(
- theFlags, inText.GetGlobalPos(), m_Renderer, inText, inText.m_Bounds, theMVP,
- inViewProjection, *inText.m_TextTexture, theTextOffset, theTextScale);
- }
m_TransparentObjects.push_back(theRenderable);
}
return retval;