summaryrefslogtreecommitdiffstats
path: root/src/render/backend/renderview.cpp
diff options
context:
space:
mode:
authorWieland Hagen <wieland.hagen@kdab.com>2017-06-27 15:58:12 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-06-27 18:23:08 +0000
commit638b8e4aaf2f89ec7f0eb115ab92486aa01d12da (patch)
tree6cd23475a6fb256672fb4b2adda710cf1faa0772 /src/render/backend/renderview.cpp
parent4d3dd82aaa18f0364431126edc5429a4113c8e5b (diff)
Fix renderer crash when camera is not set via CameraSelector
Entities would try to render and get their projection-matrix based uniforms from the camera lens, but that is NULL. Print a warning in that case, as that means that either a NoDraw is missing or a CameraSelector. Task-number: QTBUG-61656 Change-Id: Ie2bd0d115f3f61568c5b176c6a22500d29495328 Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/backend/renderview.cpp')
-rw-r--r--src/render/backend/renderview.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp
index 73cdbb6da..16e548062 100644
--- a/src/render/backend/renderview.cpp
+++ b/src/render/backend/renderview.cpp
@@ -146,6 +146,13 @@ static QRectF resolveViewport(const QRectF &fractionalViewport, const QSize &sur
fractionalViewport.height() * surfaceSize.height());
}
+static QMatrix4x4 getProjectionMatrix(const CameraLens *lens)
+{
+ if (!lens)
+ qWarning() << "[Qt3D Renderer] No Camera Lens found. Add a CameraSelector to your Frame Graph or make sure that no entities will be rendered.";
+ return lens ? lens->projection() : QMatrix4x4();
+}
+
UniformValue RenderView::standardUniformValue(RenderView::StandardUniform standardUniformType, const QMatrix4x4 &model) const
{
switch (standardUniformType) {
@@ -154,11 +161,11 @@ UniformValue RenderView::standardUniformValue(RenderView::StandardUniform standa
case ViewMatrix:
return UniformValue(m_data.m_viewMatrix);
case ProjectionMatrix:
- return UniformValue(m_data.m_renderCameraLens->projection());
+ return UniformValue(getProjectionMatrix(m_data.m_renderCameraLens));
case ModelViewMatrix:
return UniformValue(m_data.m_viewMatrix * model);
case ViewProjectionMatrix:
- return UniformValue(m_data.m_renderCameraLens->projection() * m_data.m_viewMatrix);
+ return UniformValue(getProjectionMatrix(m_data.m_renderCameraLens) * m_data.m_viewMatrix);
case ModelViewProjectionMatrix:
return UniformValue(m_data.m_viewProjectionMatrix * model);
case InverseModelMatrix:
@@ -166,15 +173,12 @@ UniformValue RenderView::standardUniformValue(RenderView::StandardUniform standa
case InverseViewMatrix:
return UniformValue(m_data.m_viewMatrix.inverted());
case InverseProjectionMatrix: {
- QMatrix4x4 projection;
- if (m_data.m_renderCameraLens)
- projection = m_data.m_renderCameraLens->projection();
- return UniformValue(projection.inverted());
+ return UniformValue(getProjectionMatrix(m_data.m_renderCameraLens).inverted());
}
case InverseModelViewMatrix:
return UniformValue((m_data.m_viewMatrix * model).inverted());
case InverseViewProjectionMatrix: {
- const QMatrix4x4 viewProjectionMatrix = m_data.m_renderCameraLens->projection() * m_data.m_viewMatrix;
+ const QMatrix4x4 viewProjectionMatrix = getProjectionMatrix(m_data.m_renderCameraLens) * m_data.m_viewMatrix;
return UniformValue(viewProjectionMatrix.inverted());
}
case InverseModelViewProjectionMatrix:
@@ -194,7 +198,7 @@ UniformValue RenderView::standardUniformValue(RenderView::StandardUniform standa
return UniformValue(viewportMatrix.inverted());
}
case Exposure:
- return UniformValue(m_data.m_renderCameraLens->exposure());
+ return UniformValue(m_data.m_renderCameraLens ? m_data.m_renderCameraLens->exposure() : 0.0f);
case Gamma:
return UniformValue(m_gamma);
case Time: