summaryrefslogtreecommitdiffstats
path: root/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2019-04-01 15:08:11 +0300
committerJere Tuliniemi <jere.tuliniemi@qt.io>2019-04-16 09:16:37 +0000
commitc6edb9c7d15843e8ab965d365099ace29e2d2049 (patch)
tree0a24f87676d342c69254e9baeedadaaf4a70e5e5 /src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
parent156910d1df8d3f11b72664cf0bf6b7fe800b53cf (diff)
Add distance field rendering to OpenGL runtime
The old text rendering remains in the background and is used to render clipped text, since that feature is not yet implemented for distance field fonts. Building the runtime with Qt version older than 5.12.2 also causes a fallback to the old text rendering. Depth pass rendering also needs to be redone in the future to avoid another full render pass. Task-number: QT3DS-3210 Change-Id: Ib7666c437d23ae25e1872682f010df3721476a14 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp')
-rw-r--r--src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
index d6fb3b1b..7c2603f6 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
+++ b/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
@@ -696,9 +696,19 @@ namespace render {
{
if (inRenderableObject.m_RenderableFlags.IsText()) {
STextRenderable &theRenderable = static_cast<STextRenderable &>(inRenderableObject);
- if (&theRenderable.m_Text == &inNode)
+ if (&theRenderable.m_Text == &inNode) {
return inPickRay.GetRelativeXY(inRenderableObject.m_GlobalTransform,
inRenderableObject.m_Bounds);
+ }
+#if QT_VERSION >= QT_VERSION_CHECK(5,12,2)
+ } else if (inRenderableObject.m_RenderableFlags.isDistanceField()) {
+ SDistanceFieldRenderable &theRenderable = static_cast<SDistanceFieldRenderable &>(
+ inRenderableObject);
+ if (&theRenderable.m_text == &inNode) {
+ return inPickRay.GetRelativeXY(inRenderableObject.m_GlobalTransform,
+ inRenderableObject.m_Bounds);
+ }
+#endif
} else if (inRenderableObject.m_RenderableFlags.IsDefaultMaterialMeshSubset()) {
SSubsetRenderable &theRenderable = static_cast<SSubsetRenderable &>(inRenderableObject);
if (&theRenderable.m_ModelContext.m_Model == &inNode)
@@ -964,14 +974,15 @@ namespace render {
}
// This doesn't have to be cheap.
- void Qt3DSRendererImpl::RunLayerRender(SLayer &inLayer, const QT3DSMat44 &inViewProjection)
+ void Qt3DSRendererImpl::RunLayerRender(SLayer &inLayer, const QT3DSMat44 &inProjection,
+ const QT3DSMat44 &inViewProjection)
{
SLayerRenderData *theData = GetOrCreateLayerRenderDataForNode(inLayer);
if (theData == NULL || theData->m_Camera == NULL) {
QT3DS_ASSERT(false);
return;
}
- theData->PrepareAndRender(inViewProjection);
+ theData->PrepareAndRender(inProjection, inViewProjection);
}
void Qt3DSRendererImpl::AddRenderWidget(IRenderWidget &inWidget)
@@ -1356,6 +1367,10 @@ namespace render {
&static_cast<SSubsetRenderable *>(&inRenderableObject)->m_ModelContext.m_Model;
else if (inRenderableObject.m_RenderableFlags.IsText())
thePickObject = &static_cast<STextRenderable *>(&inRenderableObject)->m_Text;
+#if QT_VERSION >= QT_VERSION_CHECK(5,12,2)
+ else if (inRenderableObject.m_RenderableFlags.isDistanceField())
+ thePickObject = &static_cast<SDistanceFieldRenderable *>(&inRenderableObject)->m_text;
+#endif
else if (inRenderableObject.m_RenderableFlags.IsCustomMaterialMeshSubset())
thePickObject = &static_cast<SCustomMaterialRenderable *>(&inRenderableObject)
->m_ModelContext.m_Model;