Details
-
Task
-
Resolution: Done
-
P1: Critical
-
None
-
5.15.1
-
None
Description
1. preconditions
QSG_RENDER_LOOP=threaded
QT_WAYLAND_SHELL_INTEGRATION=ivi-shell
setPersistentOpenGLContext(true)
setPersistentSceneGraph(true)
2. short description about this issue
Black screen occurs when app transitions from foreground -> background -> foreground again. (by using hide/show call)
3. Detail call sequence
When the app transitions from foreground to background by using hide()
void QWaylandWindow::setVisible(bool visible) -> QWaylandWindow::reset() at this point, delete mShellSurface Then, QSGRenderThread::invalidateGraphics() is called at this point, current = gl->makeCurrent(fallback ? static_cast<QSurface *>(fallback) : static_cast<QSurface *>(window)); called -> bool QWaylandGLContext::makeCurrent(QPlatformSurface *surface) -> window->createDecoration(); in this function, decoration will be created by "if (mShellSurface && !mShellSurface->wantsDecorations())" statement because mShellSurface was deleted already. after that FBO (Frame Buffer Object) for decoration is binded to the default frame buffer by below code in QWaylandGLContext::makeCurrent() QOpenGLContextPrivate::setCurrentContext(context()); window->bindContentFBO();
Later, when the app switches background->foreground by using show()
Black screen occurs because the default frame buffer is still exist.
3. Possible solution
We can avoid this problemm by setting
QT_WAYLAND_DISABLE_WINDOWDECORATION=1
and also we don't have to ship the decoration plugin to the target board.
4. Expectation
However, creation of decoration in this circumference is unnecessary because we are using ivi-shell. So I guess there may be improvements in qtwayland.
*. This issue has been reported by a customer.
Attachments
Issue Links
- is cloned by
-
QTBUG-97916 Improve the EGL_BAD_MATCH error on certain circumstance
- Closed