From b7e0c07633c60a901f993362df8ed356bb116a75 Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Mon, 9 May 2011 13:12:35 +0200 Subject: [PATCH] Enable mipmapping for QSGPaintedItem's texture. --- src/declarative/items/qsgpainteditem.cpp | 1 + src/declarative/scenegraph/util/qsgpainternode.cpp | 15 +++++++++++++-- src/declarative/scenegraph/util/qsgpainternode_p.h | 4 ++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/declarative/items/qsgpainteditem.cpp b/src/declarative/items/qsgpainteditem.cpp index b93406a..89cbc5e 100644 --- a/src/declarative/items/qsgpainteditem.cpp +++ b/src/declarative/items/qsgpainteditem.cpp @@ -416,6 +416,7 @@ QSGNode *QSGPaintedItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData * node->setSize(QSize(qRound(br.width()), qRound(br.height()))); node->setSmoothPainting(d->antialiasing); node->setLinearFiltering(d->smooth); + node->setMipmapping(d->smooth); node->setOpaquePainting(d->opaquePainting); node->setFillColor(d->fillColor); node->setContentsScale(d->contentsScale); diff --git a/src/declarative/scenegraph/util/qsgpainternode.cpp b/src/declarative/scenegraph/util/qsgpainternode.cpp index 1f38c6a..ee42a38 100644 --- a/src/declarative/scenegraph/util/qsgpainternode.cpp +++ b/src/declarative/scenegraph/util/qsgpainternode.cpp @@ -108,6 +108,7 @@ QSGPainterNode::QSGPainterNode(QSGPaintedItem *item) , m_dirtyContents(false) , m_opaquePainting(false) , m_linear_filtering(false) + , m_mipmapping(false) , m_smoothPainting(false) , m_extensionsChecked(false) , m_multisamplingSupported(false) @@ -194,6 +195,7 @@ void QSGPainterNode::update() void QSGPainterNode::updateTexture() { + m_texture->setHasMipmaps(m_mipmapping); m_texture->setHasAlphaChannel(!m_opaquePainting); m_material.setTexture(m_texture); m_materialO.setTexture(m_texture); @@ -293,8 +295,6 @@ void QSGPainterNode::updateRenderTarget() texture->setTextureSize(m_size); m_texture = texture; - m_material.setFiltering(m_linear_filtering ? QSGTexture::Linear : QSGTexture::Nearest); - m_materialO.setFiltering(m_linear_filtering ? QSGTexture::Linear : QSGTexture::Nearest); } void QSGPainterNode::updateFBOSize() @@ -361,6 +361,17 @@ void QSGPainterNode::setLinearFiltering(bool linearFiltering) markDirty(DirtyMaterial); } +void QSGPainterNode::setMipmapping(bool mipmapping) +{ + if (mipmapping == m_mipmapping) + return; + + m_mipmapping = mipmapping; + m_material.setMipmapFiltering(mipmapping ? QSGTexture::Linear : QSGTexture::None); + m_materialO.setMipmapFiltering(mipmapping ? QSGTexture::Linear : QSGTexture::None); + m_dirtyTexture = true; +} + void QSGPainterNode::setSmoothPainting(bool s) { if (s == m_smoothPainting) diff --git a/src/declarative/scenegraph/util/qsgpainternode_p.h b/src/declarative/scenegraph/util/qsgpainternode_p.h index a5f42ca..4174eb2 100644 --- a/src/declarative/scenegraph/util/qsgpainternode_p.h +++ b/src/declarative/scenegraph/util/qsgpainternode_p.h @@ -87,6 +87,9 @@ public: void setLinearFiltering(bool linearFiltering); bool linearFiltering() const { return m_linear_filtering; } + void setMipmapping(bool mipmapping); + bool mipmapping() const { return m_mipmapping; } + void setSmoothPainting(bool s); bool smoothPainting() const { return m_smoothPainting; } @@ -126,6 +129,7 @@ private: QRect m_dirtyRect; bool m_opaquePainting; bool m_linear_filtering; + bool m_mipmapping; bool m_smoothPainting; bool m_extensionsChecked; bool m_multisamplingSupported; -- 1.7.2.5