Add a qtbase patch to fix the qwindow-compositor display issue of NTOP
(Non-Power-Of-Two) textures for GPU which does not spport GL_REPEAT wrap mode.
The same patch is included at QT5.11.


Signed-off-by: Eric Ruei <[email protected]>
---
 ...ure-Set-wrap-mode-if-NPOT-textures-are-no.patch | 65 ++++++++++++++++++++++
 meta-arago-distro/recipes-qt/qt5/qtbase_%.bbappend |  3 +-
 2 files changed, 67 insertions(+), 1 deletion(-)
 create mode 100644 
meta-arago-distro/recipes-qt/qt5/qtbase/0001-QOpenGLTexture-Set-wrap-mode-if-NPOT-textures-are-no.patch

diff --git 
a/meta-arago-distro/recipes-qt/qt5/qtbase/0001-QOpenGLTexture-Set-wrap-mode-if-NPOT-textures-are-no.patch
 
b/meta-arago-distro/recipes-qt/qt5/qtbase/0001-QOpenGLTexture-Set-wrap-mode-if-NPOT-textures-are-no.patch
new file mode 100644
index 0000000..84a0195
--- /dev/null
+++ 
b/meta-arago-distro/recipes-qt/qt5/qtbase/0001-QOpenGLTexture-Set-wrap-mode-if-NPOT-textures-are-no.patch
@@ -0,0 +1,65 @@
+From fbb9c0461c14196ac7100c90088c15263d0cccbb Mon Sep 17 00:00:00 2001
+From: Johan Klokkhammer Helsing <[email protected]>
+Date: Tue, 3 Apr 2018 14:42:15 +0200
+Subject: [PATCH] QOpenGLTexture: Set wrap mode if NPOT textures are not fully
+ supported
+
+The OpenGL wrap mode defaults to GL_REPEAT although it is not supported for
+non-power-of-two textures on hardware that only has limited support.
+
+I.e. the following would create a texture with an invalid wrap mode:
+
+    auto *t = new QOpenGLTexture(QOpenGLTexture::Target2D);
+    t.setSize(123, 456);
+
+This patch adds a check in QOpenGLWindow::setSize to see if it's called with a
+non-power-of-two size on hardware without full support, and if so sets wrapMode
+to ClampToEdge (which should work on devices with limited support).
+
+Task-number: QTBUG-67418
+Change-Id: I56e9f4383dbf5430c2bc5e4e9e585712b3603c13
+Reviewed-by: Laszlo Agocs <[email protected]>
+---
+ src/gui/opengl/qopengltexture.cpp | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/src/gui/opengl/qopengltexture.cpp 
b/src/gui/opengl/qopengltexture.cpp
+index b825b56..cea4b51 100644
+--- a/src/gui/opengl/qopengltexture.cpp
++++ b/src/gui/opengl/qopengltexture.cpp
+@@ -2800,6 +2800,11 @@ QOpenGLTexture::TextureFormat QOpenGLTexture::format() 
const
+     return d->format;
+ }
+ 
++static bool isNpot(int width, int height = 1, int depth = 1)
++{
++    return width & (width-1) || height & (height-1) || depth & (depth-1);
++}
++
+ /*!
+     Sets the dimensions of this texture object to \a width,
+     \a height, and \a depth. The default for each dimension is 1.
+@@ -2807,6 +2812,10 @@ QOpenGLTexture::TextureFormat QOpenGLTexture::format() 
const
+     implementation. Allocating storage for a texture less than the
+     maximum size can still fail if your system is low on resources.
+ 
++    If a non-power-of-two \a width, \a height or \a depth is provided and your
++    OpenGL implementation doesn't have support for repeating non-power-of-two
++    textures, then the wrap mode is automatically set to ClampToEdge.
++
+     \sa width(), height(), depth()
+ */
+ void QOpenGLTexture::setSize(int width, int height, int depth)
+@@ -2819,6 +2828,9 @@ void QOpenGLTexture::setSize(int width, int height, int 
depth)
+         return;
+     }
+ 
++    if (isNpot(width, height, depth) && 
!hasFeature(Feature::NPOTTextureRepeat) && d->target != Target::TargetRectangle)
++        d->setWrapMode(WrapMode::ClampToEdge);
++
+     switch (d->target) {
+     case QOpenGLTexture::Target1D:
+     case QOpenGLTexture::Target1DArray:
+-- 
+1.9.1
+
diff --git a/meta-arago-distro/recipes-qt/qt5/qtbase_%.bbappend 
b/meta-arago-distro/recipes-qt/qt5/qtbase_%.bbappend
index 62f49e4..571261e 100644
--- a/meta-arago-distro/recipes-qt/qt5/qtbase_%.bbappend
+++ b/meta-arago-distro/recipes-qt/qt5/qtbase_%.bbappend
@@ -4,7 +4,7 @@ GLES_EXTRA_DEPS = "libdrm wayland"
 
 PACKAGECONFIG[gles2] = "-opengl es2 -eglfs,,virtual/libgles2 virtual/egl 
${GLES_EXTRA_DEPS}"
 
-PR_append = ".arago12"
+PR_append = ".arago13"
 
 QT_CONFIG_FLAGS += "-qpa ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 
'wayland', 'eglfs', d)}"
 
@@ -18,6 +18,7 @@ SRC_URI += "\
     ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '', 
"${QT_EGLFS_PATCHES}", d)}\
     file://0001-deform-Fix-how-controls-are-shown.patch \
     file://0002-deform-disable-opengl-button.patch \
+    file://0001-QOpenGLTexture-Set-wrap-mode-if-NPOT-textures-are-no.patch \
 "
 
 python do_patch_append() {
-- 
1.9.1

_______________________________________________
meta-arago mailing list
[email protected]
http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago

Reply via email to