diff options
author | Gunnar Sletta <gunnar.sletta@digia.com> | 2013-03-20 15:40:49 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-04-02 08:29:53 +0200 |
commit | 5eae605a475db96ed16d81101e00e736efe9f202 (patch) | |
tree | 835210db06b49d48637d192b1064a0e900a57aba /src/quick/items | |
parent | 1c85dc38fa1939d1ce667693a227ab925f6a1dcc (diff) |
Fix distance field antialiasing for retina displays.
Change-Id: I01d7d41a4e70822555bae453978dbe92fbb5c98d
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquickshadereffectsource.cpp | 10 | ||||
-rw-r--r-- | src/quick/items/qquickshadereffectsource_p.h | 3 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 1 |
3 files changed, 11 insertions, 3 deletions
diff --git a/src/quick/items/qquickshadereffectsource.cpp b/src/quick/items/qquickshadereffectsource.cpp index cab3692f5a..59b788643a 100644 --- a/src/quick/items/qquickshadereffectsource.cpp +++ b/src/quick/items/qquickshadereffectsource.cpp @@ -131,6 +131,7 @@ void QQuickShaderEffectSourceNode::markDirtyTexture() QQuickShaderEffectTexture::QQuickShaderEffectTexture(QQuickItem *shaderSource) : QSGDynamicTexture() , m_item(0) + , m_device_pixel_ratio(1) , m_format(GL_RGBA) , m_renderer(0) , m_fbo(0) @@ -313,6 +314,7 @@ void QQuickShaderEffectTexture::grab() m_renderer = m_context->createRenderer(); connect(m_renderer, SIGNAL(sceneGraphChanged()), this, SLOT(markDirtyTexture())); } + m_renderer->setDevicePixelRatio(m_device_pixel_ratio); m_renderer->setRootNode(static_cast<QSGRootNode *>(root)); bool deleteFboLater = false; @@ -960,11 +962,12 @@ QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaint : m_textureSize; Q_ASSERT(!textureSize.isEmpty()); + QQuickItemPrivate *d = static_cast<QQuickItemPrivate *>(QObjectPrivate::get(this)); + // Crate large textures on high-dpi displays. - if (sourceItem() && sourceItem()->window()) - textureSize *= sourceItem()->window()->devicePixelRatio(); + if (sourceItem()) + textureSize *= d->window->devicePixelRatio(); - QQuickItemPrivate *d = static_cast<QQuickItemPrivate *>(QObjectPrivate::get(this)); const QSize minTextureSize = d->sceneGraphContext()->minimumFBOSize(); // Keep power-of-two by doubling the size. while (textureSize.width() < minTextureSize.width()) @@ -972,6 +975,7 @@ QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaint while (textureSize.height() < minTextureSize.height()) textureSize.rheight() *= 2; + m_texture->setDevicePixelRatio(d->window->devicePixelRatio()); m_texture->setSize(textureSize); m_texture->setRecursive(m_recursive); m_texture->setFormat(GLenum(m_format)); diff --git a/src/quick/items/qquickshadereffectsource_p.h b/src/quick/items/qquickshadereffectsource_p.h index 57aba314aa..f391ed2389 100644 --- a/src/quick/items/qquickshadereffectsource_p.h +++ b/src/quick/items/qquickshadereffectsource_p.h @@ -111,6 +111,8 @@ public: bool recursive() const { return bool(m_recursive); } void setRecursive(bool recursive); + void setDevicePixelRatio(qreal ratio) { m_device_pixel_ratio = ratio; } + void scheduleUpdate(); QImage toImage() const; @@ -128,6 +130,7 @@ private: QSGNode *m_item; QRectF m_rect; QSize m_size; + qreal m_device_pixel_ratio; GLenum m_format; QSGRenderer *m_renderer; diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 594897eae3..176f46e3b7 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -348,6 +348,7 @@ void QQuickWindowPrivate::renderSceneGraph(const QSize &size) renderer->setViewportRect(QRect(QPoint(0, 0), size * devicePixelRatio)); } renderer->setProjectionMatrixToRect(QRect(QPoint(0, 0), size)); + renderer->setDevicePixelRatio(q->devicePixelRatio()); context->renderNextFrame(renderer, fboId); emit q->afterRendering(); |