aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@digia.com>2012-11-21 14:26:05 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-12-01 11:33:17 +0100
commit9c9ad9b86f5ae30df1021300d1b775f6d341a78f (patch)
treee27cb835da4b41a7a3fa345ea0f53195a317929d /src
parent2ebb2fce87642ef0da8629bdb27164fffbdcdcb9 (diff)
Qt Quick high-dpi support.
Set the device and viewport rect to the full device pixel size. Set the projection matrix to the device independent pixel size. Scale shader effect source texture sizes. Change-Id: I61dd546ff36a7ce6ad05f908796555674c714c1a Reviewed-by: Samuel Rødal <samuel.rodal@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickshadereffectsource.cpp5
-rw-r--r--src/quick/items/qquickwindow.cpp7
2 files changed, 9 insertions, 3 deletions
diff --git a/src/quick/items/qquickshadereffectsource.cpp b/src/quick/items/qquickshadereffectsource.cpp
index 547e2141f6..2b613df0f2 100644
--- a/src/quick/items/qquickshadereffectsource.cpp
+++ b/src/quick/items/qquickshadereffectsource.cpp
@@ -955,6 +955,11 @@ QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaint
? QSize(qCeil(qAbs(sourceRect.width())), qCeil(qAbs(sourceRect.height())))
: m_textureSize;
Q_ASSERT(!textureSize.isEmpty());
+
+ // Crate large textures on high-dpi displays.
+ if (sourceItem() && sourceItem()->window())
+ textureSize *= sourceItem()->window()->devicePixelRatio();
+
QQuickItemPrivate *d = static_cast<QQuickItemPrivate *>(QObjectPrivate::get(this));
const QSize minTextureSize = d->sceneGraphContext()->minimumFBOSize();
// Keep power-of-two by doubling the size.
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index 2ce91cdc2c..a915430616 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -336,14 +336,15 @@ void QQuickWindowPrivate::renderSceneGraph(const QSize &size)
Q_Q(QQuickWindow);
emit q->beforeRendering();
int fboId = 0;
- renderer->setDeviceRect(QRect(QPoint(0, 0), size));
+ const qreal devicePixelRatio = q->devicePixelRatio();
+ renderer->setDeviceRect(QRect(QPoint(0, 0), size * devicePixelRatio));
if (renderTargetId) {
fboId = renderTargetId;
renderer->setViewportRect(QRect(QPoint(0, 0), renderTargetSize));
} else {
- renderer->setViewportRect(QRect(QPoint(0, 0), size));
+ renderer->setViewportRect(QRect(QPoint(0, 0), size * devicePixelRatio));
}
- renderer->setProjectionMatrixToDeviceRect();
+ renderer->setProjectionMatrixToRect(QRect(QPoint(0, 0), size));
context->renderNextFrame(renderer, fboId);
emit q->afterRendering();