summaryrefslogtreecommitdiffstats
path: root/src/core/delegated_frame_node.cpp
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2017-11-16 17:43:30 +0100
committerJüri Valdmann <juri.valdmann@qt.io>2017-11-27 08:57:58 +0000
commit88a485467551d126cef26de002b146dfc15775c2 (patch)
tree8e56fea5108abe09e7747d21af0968b336cefa84 /src/core/delegated_frame_node.cpp
parent446544fb42a5f89de0860287a610144fb3583fb6 (diff)
Stop creating image nodes without textures
Triggers segfault when using software backend. Task-number: QTBUG-64562 Change-Id: Ib7c55c8480cbccd5a546813d84021b57bb02d067 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Michael Brüning <michael.bruning@qt.io>
Diffstat (limited to 'src/core/delegated_frame_node.cpp')
-rw-r--r--src/core/delegated_frame_node.cpp26
1 files changed, 7 insertions, 19 deletions
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index 78241a431..6f4a4e8db 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -218,14 +218,8 @@ public:
void setupRenderPassNode(QSGTexture *layer, const QRect &rect, QSGNode *) override
{
+ Q_ASSERT(layer);
QSGInternalImageNode *imageNode = static_cast<QSGInternalImageNode*>(*m_nodeIterator++);
- // In case of a missing render pass, set the target rects to be empty and return early.
- // cc::GLRenderer::DrawRenderPassQuad silently ignores missing render passes
- if (!layer) {
- imageNode->setTargetRect(QRect());
- imageNode->setInnerTargetRect(QRect());
- return;
- }
imageNode->setTargetRect(rect);
imageNode->setInnerTargetRect(rect);
imageNode->setTexture(layer);
@@ -320,23 +314,16 @@ public:
void setupRenderPassNode(QSGTexture *layer, const QRect &rect,
QSGNode *layerChain) override
{
+ Q_ASSERT(layer);
// Only QSGInternalImageNode currently supports QSGLayer textures.
QSGInternalImageNode *imageNode = m_apiDelegate->createImageNode();
- layerChain->appendChildNode(imageNode);
- m_sceneGraphNodes->append(imageNode);
-
- // In case of a missing render pass, set the target rects to be empty and return early.
- // cc::GLRenderer::DrawRenderPassQuad silently ignores missing render passes
- if (!layer) {
- imageNode->setTargetRect(QRect());
- imageNode->setInnerTargetRect(QRect());
- return;
- }
-
imageNode->setTargetRect(rect);
imageNode->setInnerTargetRect(rect);
imageNode->setTexture(layer);
imageNode->update();
+
+ layerChain->appendChildNode(imageNode);
+ m_sceneGraphNodes->append(imageNode);
}
void setupTextureContentNode(QSGTexture *texture, const QRect &rect, const QRectF &sourceRect,
@@ -1110,7 +1097,8 @@ void DelegatedFrameNode::handleQuad(
QSGTexture *layer =
findRenderPassLayer(renderPassQuad->render_pass_id, m_sgObjects.renderPassLayers).data();
- nodeHandler->setupRenderPassNode(layer, toQt(quad->rect), currentLayerChain);
+ if (layer)
+ nodeHandler->setupRenderPassNode(layer, toQt(quad->rect), currentLayerChain);
break;
}
case cc::DrawQuad::TEXTURE_CONTENT: {