aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaylor Braun-Jones <taylor.braun-jones@ge.com>2014-08-01 10:48:37 -0400
committerGunnar Sletta <gunnar.sletta@jollamobile.com>2014-08-05 07:46:17 +0200
commit89a01dcbc2d427e661c19d50c5b875b1dc54b2f9 (patch)
treead48aee8875990ef1ed757ffb062819e27d66d7d
parent3f5141e5b7227630ca89329a92b6ebddbcb1b7a5 (diff)
Fix FBO recreated every time the QSG node is updated under some conditions
When textureFollowsItemsSize is true and the item width/height are (1) not precise integer values or (2) less than the minimum FBO width/height, then QQuickFramebufferObject will delete and recreate the FBO every time the QSG node is updated. This patch fixes the issue. Task-number: QTBUG-40548 Change-Id: I532aaaa88a5c604ee7cc1fd8f0acb0601c5a94fb Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
-rw-r--r--src/quick/items/qquickframebufferobject.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/quick/items/qquickframebufferobject.cpp b/src/quick/items/qquickframebufferobject.cpp
index 10d281b7a1..4c43292f7c 100644
--- a/src/quick/items/qquickframebufferobject.cpp
+++ b/src/quick/items/qquickframebufferobject.cpp
@@ -235,8 +235,12 @@ QSGNode *QQuickFramebufferObject::updatePaintNode(QSGNode *node, UpdatePaintNode
n->renderer->synchronize(this);
+ QSize minFboSize = d->sceneGraphContext()->minimumFBOSize();
+ QSize desiredFboSize(qMax<int>(minFboSize.width(), width()),
+ qMax<int>(minFboSize.height(), height()));
+
if (n->fbo && (d->followsItemSize || n->invalidatePending)) {
- if (n->fbo->width() != width() || n->fbo->height() != height()) {
+ if (n->fbo->size() != desiredFboSize) {
delete n->fbo;
n->fbo = 0;
delete n->msDisplayFbo;
@@ -245,10 +249,7 @@ QSGNode *QQuickFramebufferObject::updatePaintNode(QSGNode *node, UpdatePaintNode
}
if (!n->fbo) {
- QSize minFboSize = d->sceneGraphContext()->minimumFBOSize();
- QSize fboSize(qMax<int>(minFboSize.width(), width()),
- qMax<int>(minFboSize.height(), height()));
- n->fbo = n->renderer->createFramebufferObject(fboSize);
+ n->fbo = n->renderer->createFramebufferObject(desiredFboSize);
GLuint displayTexture = n->fbo->texture();