summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-10-02 10:16:14 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-10-02 09:13:14 +0000
commit1fae7d725a5f51a1def0be614d503686664f2128 (patch)
tree212cc48db23e62ffa7d5dac92a192da1bcee9cd1
parent7fb329705494f0cd2448ab1b9d72223e6dbc20b0 (diff)
Fix tiled layers
Calculates and uses the source rect of layers. Task-number: QTBUG-67652 Change-Id: If5569da6e18a3b9728392ecf1f3c60e9e0663229 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
-rw-r--r--src/core/delegated_frame_node.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp
index 9805e3333..84fde7ca2 100644
--- a/src/core/delegated_frame_node.cpp
+++ b/src/core/delegated_frame_node.cpp
@@ -183,7 +183,7 @@ public:
virtual ~DelegatedNodeTreeHandler(){}
- virtual void setupRenderPassNode(QSGTexture *, const QRect &, QSGNode *) = 0;
+ virtual void setupRenderPassNode(QSGTexture *, const QRect &, const QRectF &, QSGNode *) = 0;
virtual void setupTextureContentNode(QSGTexture *, const QRect &, const QRectF &,
QSGImageNode::TextureCoordinatesTransformMode,
QSGNode *) = 0;
@@ -213,13 +213,14 @@ public:
{
}
- void setupRenderPassNode(QSGTexture *layer, const QRect &rect, QSGNode *) override
+ void setupRenderPassNode(QSGTexture *layer, const QRect &rect, const QRectF &sourceRect, QSGNode *) override
{
Q_ASSERT(layer);
Q_ASSERT(m_nodeIterator != m_sceneGraphNodes->end());
QSGInternalImageNode *imageNode = static_cast<QSGInternalImageNode*>(*m_nodeIterator++);
imageNode->setTargetRect(rect);
imageNode->setInnerTargetRect(rect);
+ imageNode->setSubSourceRect(layer->convertToNormalizedSourceRect(sourceRect));
imageNode->setTexture(layer);
imageNode->update();
}
@@ -298,14 +299,15 @@ public:
{
}
- void setupRenderPassNode(QSGTexture *layer, const QRect &rect,
+ void setupRenderPassNode(QSGTexture *layer, const QRect &rect, const QRectF &sourceRect,
QSGNode *layerChain) override
{
Q_ASSERT(layer);
// Only QSGInternalImageNode currently supports QSGLayer textures.
- QSGInternalImageNode *imageNode = m_apiDelegate->createImageNode();
+ QSGInternalImageNode *imageNode = m_apiDelegate->createInternalImageNode();
imageNode->setTargetRect(rect);
imageNode->setInnerTargetRect(rect);
+ imageNode->setSubSourceRect(layer->convertToNormalizedSourceRect(sourceRect));
imageNode->setTexture(layer);
imageNode->update();
@@ -1072,13 +1074,14 @@ void DelegatedFrameNode::handleQuad(
const viz::RenderPassDrawQuad *renderPassQuad = viz::RenderPassDrawQuad::MaterialCast(quad);
if (!renderPassQuad->mask_texture_size.IsEmpty()) {
ResourceHolder *resource = findAndHoldResource(renderPassQuad->mask_resource_id(), resourceCandidates);
- Q_UNUSED(resource); // FIXME
+ Q_UNUSED(resource); // FIXME: QTBUG-67652
}
- QSGTexture *layer =
+ QSGLayer *layer =
findRenderPassLayer(renderPassQuad->render_pass_id, m_sgObjects.renderPassLayers).data();
if (layer)
- nodeHandler->setupRenderPassNode(layer, toQt(quad->rect), currentLayerChain);
+ nodeHandler->setupRenderPassNode(layer, toQt(quad->rect), toQt(renderPassQuad->tex_coord_rect), currentLayerChain);
+
break;
}
case viz::DrawQuad::TEXTURE_CONTENT: {