aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@theqtcompany.com>2016-06-28 12:00:53 +0200
committerPaolo Angelelli <paolo.angelelli@theqtcompany.com>2016-06-28 21:19:27 +0000
commit285007f9687ef8aca6faed89f0c56696c2612548 (patch)
tree50f443ab12e3b04c4ab6e56c9c48e164b0ef767b
parentd44e75271cfccde26761ad9ed8accdd872f478d1 (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>
-rw-r--r--src/plugins/scenegraph/d3d12/qsgd3d12publicnodes.cpp14
-rw-r--r--src/plugins/scenegraph/d3d12/qsgd3d12publicnodes_p.h3
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarepublicnodes_p.h3
-rw-r--r--src/quick/scenegraph/util/qsgdefaultimagenode.cpp15
-rw-r--r--src/quick/scenegraph/util/qsgdefaultimagenode_p.h3
-rw-r--r--src/quick/scenegraph/util/qsgimagenode.cpp15
-rw-r--r--src/quick/scenegraph/util/qsgimagenode.h3
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,