diff options
author | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-04-12 14:24:32 +0300 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@qt.io> | 2019-04-29 14:44:37 +0000 |
commit | e97f897eca6d48fa16d2402f17f3aea5f0816ece (patch) | |
tree | 7ca16f305e8396be43462a9fec78b56801d0f29b /src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp | |
parent | 1040c4cc4bee2cdca543ced6e4cd2a0504de8767 (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.cpp | 67 |
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; |