diff options
author | Paolo Angelelli <paolo.angelelli@theqtcompany.com> | 2016-06-28 12:00:53 +0200 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@theqtcompany.com> | 2016-06-28 21:19:27 +0000 |
commit | 285007f9687ef8aca6faed89f0c56696c2612548 (patch) | |
tree | 50f443ab12e3b04c4ab6e56c9c48e164b0ef767b | |
parent | d44e75271cfccde26761ad9ed8accdd872f478d1 (diff) |
Add mipmapping support to QSGImageNode
This patch adds two virtual methods to QSGImageNode to set/get the
filtering mode for mipmapping, which makes it also possible to enable
it, which was previously not possible
Change-Id: Ie08a11aab35d8ba335841ca0eb73ef4b3d184d7e
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
7 files changed, 56 insertions, 0 deletions
diff --git a/src/plugins/scenegraph/d3d12/qsgd3d12publicnodes.cpp b/src/plugins/scenegraph/d3d12/qsgd3d12publicnodes.cpp index de9869aee8..783caa280f 100644 --- a/src/plugins/scenegraph/d3d12/qsgd3d12publicnodes.cpp +++ b/src/plugins/scenegraph/d3d12/qsgd3d12publicnodes.cpp @@ -118,6 +118,20 @@ QSGTexture::Filtering QSGD3D12ImageNode::filtering() const return m_material.filtering(); } +void QSGD3D12ImageNode::setMipmapFiltering(QSGTexture::Filtering filtering) +{ + if (m_material.mipmapFiltering() == filtering) + return; + + m_material.setMipmapFiltering(filtering); + markDirty(DirtyMaterial); +} + +QSGTexture::Filtering QSGD3D12ImageNode::mipmapFiltering() const +{ + return m_material.mipmapFiltering(); +} + void QSGD3D12ImageNode::setRect(const QRectF &r) { if (m_rect == r) diff --git a/src/plugins/scenegraph/d3d12/qsgd3d12publicnodes_p.h b/src/plugins/scenegraph/d3d12/qsgd3d12publicnodes_p.h index 14e34bc0ac..6150083aaf 100644 --- a/src/plugins/scenegraph/d3d12/qsgd3d12publicnodes_p.h +++ b/src/plugins/scenegraph/d3d12/qsgd3d12publicnodes_p.h @@ -92,6 +92,9 @@ public: void setFiltering(QSGTexture::Filtering filtering) override; QSGTexture::Filtering filtering() const override; + void setMipmapFiltering(QSGTexture::Filtering filtering) override; + QSGTexture::Filtering mipmapFiltering() const override; + void setTextureCoordinatesTransform(TextureCoordinatesTransformMode mode) override; TextureCoordinatesTransformMode textureCoordinatesTransform() const override; diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarepublicnodes_p.h b/src/quick/scenegraph/adaptations/software/qsgsoftwarepublicnodes_p.h index 8f5216d03a..8a11f25c82 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarepublicnodes_p.h +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarepublicnodes_p.h @@ -94,6 +94,9 @@ public: void setFiltering(QSGTexture::Filtering) override { } QSGTexture::Filtering filtering() const override { return QSGTexture::None; } + void setMipmapFiltering(QSGTexture::Filtering) override { } + QSGTexture::Filtering mipmapFiltering() const override { return QSGTexture::None; } + void setTextureCoordinatesTransform(TextureCoordinatesTransformMode) override { } TextureCoordinatesTransformMode textureCoordinatesTransform() const override { return NoTransform; } diff --git a/src/quick/scenegraph/util/qsgdefaultimagenode.cpp b/src/quick/scenegraph/util/qsgdefaultimagenode.cpp index ed3d73adb4..6afe591dca 100644 --- a/src/quick/scenegraph/util/qsgdefaultimagenode.cpp +++ b/src/quick/scenegraph/util/qsgdefaultimagenode.cpp @@ -79,6 +79,21 @@ QSGTexture::Filtering QSGDefaultImageNode::filtering() const return m_material.filtering(); } +void QSGDefaultImageNode::setMipmapFiltering(QSGTexture::Filtering filtering) +{ + if (m_material.mipmapFiltering() == filtering) + return; + + m_material.setMipmapFiltering(filtering); + m_opaque_material.setMipmapFiltering(filtering); + markDirty(DirtyMaterial); +} + +QSGTexture::Filtering QSGDefaultImageNode::mipmapFiltering() const +{ + return m_material.mipmapFiltering(); +} + void QSGDefaultImageNode::setRect(const QRectF &r) { if (m_rect == r) diff --git a/src/quick/scenegraph/util/qsgdefaultimagenode_p.h b/src/quick/scenegraph/util/qsgdefaultimagenode_p.h index 5316542cff..eb6c487c18 100644 --- a/src/quick/scenegraph/util/qsgdefaultimagenode_p.h +++ b/src/quick/scenegraph/util/qsgdefaultimagenode_p.h @@ -76,6 +76,9 @@ public: void setFiltering(QSGTexture::Filtering filtering) override; QSGTexture::Filtering filtering() const override; + void setMipmapFiltering(QSGTexture::Filtering filtering) override; + QSGTexture::Filtering mipmapFiltering() const override; + void setTextureCoordinatesTransform(TextureCoordinatesTransformMode mode) override; TextureCoordinatesTransformMode textureCoordinatesTransform() const override; diff --git a/src/quick/scenegraph/util/qsgimagenode.cpp b/src/quick/scenegraph/util/qsgimagenode.cpp index fbc4314bd8..a78bfc1c66 100644 --- a/src/quick/scenegraph/util/qsgimagenode.cpp +++ b/src/quick/scenegraph/util/qsgimagenode.cpp @@ -128,6 +128,21 @@ QT_BEGIN_NAMESPACE */ /*! + \fn void QSGImageNode::setMipmapFiltering(QSGTexture::Filtering filtering) + + Sets the mipmap filtering to be used for this image node to \a filtering. + + For smooth scaling between mip maps, use QSGTexture::Linear. + For normal scaling, use QSGTexture::Nearest. + */ + +/*! + \fn QSGTexture::Filtering QSGImageNode::mipmapFiltering() const + + Returns the mipmap filtering for this image node. + */ + +/*! \enum QSGImageNode::TextureCoordinatesTransformFlag The TextureCoordinatesTransformFlag enum is used to specify the mode used diff --git a/src/quick/scenegraph/util/qsgimagenode.h b/src/quick/scenegraph/util/qsgimagenode.h index a094924ac3..7eab42c4e6 100644 --- a/src/quick/scenegraph/util/qsgimagenode.h +++ b/src/quick/scenegraph/util/qsgimagenode.h @@ -64,6 +64,9 @@ public: virtual void setFiltering(QSGTexture::Filtering filtering) = 0; virtual QSGTexture::Filtering filtering() const = 0; + virtual void setMipmapFiltering(QSGTexture::Filtering filtering) = 0; + virtual QSGTexture::Filtering mipmapFiltering() const = 0; + enum TextureCoordinatesTransformFlag { NoTransform = 0x00, MirrorHorizontally = 0x01, |