aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@jollamobile.com>2014-02-18 19:54:32 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-21 06:39:34 +0100
commitc6c95915f076577d5194044d793889cb8b690230 (patch)
tree2d4d3d7968358c209f356ddcbb930f3d2f5e135f
parentf158fa7feaa5d9fc2ae17aa16853acbbb947443a (diff)
Make sure we update filtering options on atlas textures.
We had had an optimization which tried to reduce state changes, but filtering is also changed in QSGTexture::updateBindOptions which Atlas::bind() didn't know anything about. Solution: don't try to be so clever. Task-number: QTBUG-35457 Change-Id: I39ac0106396921e1b652db2b2aa5a9923b35e825 Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
-rw-r--r--src/quick/scenegraph/util/qsgatlastexture.cpp18
-rw-r--r--src/quick/scenegraph/util/qsgatlastexture_p.h4
-rw-r--r--tests/auto/quick/scenegraph/data/blacknwhite.pngbin0 -> 156 bytes
-rw-r--r--tests/auto/quick/scenegraph/data/render_ImageFiltering.qml73
-rw-r--r--tests/auto/quick/scenegraph/scenegraph.pro3
-rw-r--r--tests/auto/quick/scenegraph/tst_scenegraph.cpp1
6 files changed, 82 insertions, 17 deletions
diff --git a/src/quick/scenegraph/util/qsgatlastexture.cpp b/src/quick/scenegraph/util/qsgatlastexture.cpp
index fe659c9add..333bc62143 100644
--- a/src/quick/scenegraph/util/qsgatlastexture.cpp
+++ b/src/quick/scenegraph/util/qsgatlastexture.cpp
@@ -140,7 +140,6 @@ Atlas::Atlas(const QSize &size)
: m_allocator(size)
, m_texture_id(0)
, m_size(size)
- , m_filtering(QSGTexture::Linear)
, m_allocated(false)
{
@@ -315,9 +314,8 @@ void Atlas::uploadBgra(Texture *texture)
}
-bool Atlas::bind(QSGTexture::Filtering filtering)
+void Atlas::bind(QSGTexture::Filtering filtering)
{
- bool forceUpdate = false;
if (!m_allocated) {
m_allocated = true;
@@ -362,13 +360,12 @@ bool Atlas::bind(QSGTexture::Filtering filtering)
glDeleteTextures(1, &m_texture_id);
m_texture_id = 0;
}
- forceUpdate = true;
} else {
glBindTexture(GL_TEXTURE_2D, m_texture_id);
}
if (m_texture_id == 0)
- return false;
+ return;
// Upload all pending images..
for (int i=0; i<m_pending_uploads.size(); ++i) {
@@ -403,16 +400,11 @@ bool Atlas::bind(QSGTexture::Filtering filtering)
#endif
}
- if (filtering != m_filtering) {
- GLenum f = filtering == QSGTexture::Nearest ? GL_NEAREST : GL_LINEAR;
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, f);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, f);
- m_filtering = filtering;
- }
+ GLenum f = filtering == QSGTexture::Nearest ? GL_NEAREST : GL_LINEAR;
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, f);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, f);
m_pending_uploads.clear();
-
- return forceUpdate;
}
void Atlas::remove(Texture *t)
diff --git a/src/quick/scenegraph/util/qsgatlastexture_p.h b/src/quick/scenegraph/util/qsgatlastexture_p.h
index ade7b8f00e..51439cdb26 100644
--- a/src/quick/scenegraph/util/qsgatlastexture_p.h
+++ b/src/quick/scenegraph/util/qsgatlastexture_p.h
@@ -85,7 +85,7 @@ public:
void invalidate();
int textureId() const;
- bool bind(QSGTexture::Filtering filteing);
+ void bind(QSGTexture::Filtering filtering);
void upload(Texture *texture);
void uploadBgra(Texture *texture);
@@ -104,8 +104,6 @@ private:
GLuint m_internalFormat;
GLuint m_externalFormat;
- QSGTexture::Filtering m_filtering;
-
uint m_allocated : 1;
uint m_use_bgra_fallback: 1;
diff --git a/tests/auto/quick/scenegraph/data/blacknwhite.png b/tests/auto/quick/scenegraph/data/blacknwhite.png
new file mode 100644
index 0000000000..efbc61e79d
--- /dev/null
+++ b/tests/auto/quick/scenegraph/data/blacknwhite.png
Binary files differ
diff --git a/tests/auto/quick/scenegraph/data/render_ImageFiltering.qml b/tests/auto/quick/scenegraph/data/render_ImageFiltering.qml
new file mode 100644
index 0000000000..f91bc59931
--- /dev/null
+++ b/tests/auto/quick/scenegraph/data/render_ImageFiltering.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Jolla Ltd, author: <gunnar.sletta@jollamobile.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+
+/*
+ The test verifies that batching does not interfere with overlapping
+ regions.
+
+ #samples: 8
+ PixelPos R G B Error-tolerance
+ #final: 10 10 0.0 0.0 0.0 0.0
+ #final: 20 10 1.0 1.0 1.0 0.0
+ #final: 30 10 0.0 0.0 0.0 0.0
+ #final: 40 10 0.5 0.5 0.5 0.1
+ #final: 50 10 0.0 0.0 0.0 0.0
+ #final: 60 10 1.0 1.0 1.0 0.0
+ #final: 70 10 0.0 0.0 0.0 0.0
+ #final: 80 10 0.5 0.5 0.5 0.1
+*/
+
+RenderTestBase
+{
+ Item {
+ x: 10
+ y: 10
+ scale: 10
+ Image { x: 0; source: "blacknwhite.png"; smooth: false }
+ Image { x: 2; source: "blacknwhite.png"; smooth: true }
+ Image { x: 4; source: "blacknwhite.png"; smooth: false }
+ Image { x: 6; source: "blacknwhite.png"; smooth: true }
+ }
+
+ finalStageComplete: true
+}
diff --git a/tests/auto/quick/scenegraph/scenegraph.pro b/tests/auto/quick/scenegraph/scenegraph.pro
index 1aa73ca60a..0ad13a086f 100644
--- a/tests/auto/quick/scenegraph/scenegraph.pro
+++ b/tests/auto/quick/scenegraph/scenegraph.pro
@@ -12,4 +12,5 @@ DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
OTHER_FILES += \
data/render_OutOfFloatRange.qml \
- data/simple.qml
+ data/simple.qml \
+ data/render_ImageFiltering.qml
diff --git a/tests/auto/quick/scenegraph/tst_scenegraph.cpp b/tests/auto/quick/scenegraph/tst_scenegraph.cpp
index af5acde5f3..5d393fedb5 100644
--- a/tests/auto/quick/scenegraph/tst_scenegraph.cpp
+++ b/tests/auto/quick/scenegraph/tst_scenegraph.cpp
@@ -327,6 +327,7 @@ void tst_SceneGraph::render_data()
<< "data/render_OutOfFloatRange.qml"
<< "data/render_StackingOrder.qml"
<< "data/render_Mipmap.qml"
+ << "data/render_ImageFiltering.qml"
;
QRegExp sampleCount("#samples: *(\\d+)");