QOpenGLCompositorBackingStore: ensure backing store on flushed windows
When the first QEglFSWindow got created for a QWindow, a backing store was created with it and associated to the new QEglFSWindow. When the window was hidden on the platform screen, the QEglFSWindow got deleted and re-created when it was supposed to be shown. The re-created QEglFSWindow was no longer associated to the backing store. It was therefore not rendered on the screen. => ensure that the backing store is re-associated to the QEglFSWindow, corrsponding to the QWindow argument passed to flush(). No autotest is added, because the fix is purely visual. The widgets/menus example can be used to test the functionality manually (see bug reports). Fixes: QTBUG-115196 Fixes: QTBUG-116769 Pick-to: 6.6 6.5 6.2 Change-Id: I92ce2e8f7e76bd2d26e713a4d20612d079fb4717 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
This commit is contained in:
parent
e26e6d6725
commit
4bc8f54822
@ -29,6 +29,7 @@ class QOpenGLFramebufferObject;
|
||||
class QWindow;
|
||||
class QPlatformTextureList;
|
||||
|
||||
class QOpenGLCompositorBackingStore;
|
||||
class QOpenGLCompositorWindow
|
||||
{
|
||||
public:
|
||||
@ -37,6 +38,8 @@ public:
|
||||
virtual const QPlatformTextureList *textures() const = 0;
|
||||
virtual void beginCompositing() { }
|
||||
virtual void endCompositing() { }
|
||||
virtual void setBackingStore(QOpenGLCompositorBackingStore *backingStore) = 0;
|
||||
virtual QOpenGLCompositorBackingStore *backingStore() const = 0;
|
||||
};
|
||||
|
||||
class Q_OPENGL_EXPORT QOpenGLCompositor : public QObject
|
||||
|
@ -137,6 +137,9 @@ void QOpenGLCompositorBackingStore::updateTexture()
|
||||
void QOpenGLCompositorBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset)
|
||||
{
|
||||
// Called for ordinary raster windows.
|
||||
auto *handle = dynamic_cast<QOpenGLCompositorWindow *>(window->handle());
|
||||
if (handle && !handle->backingStore())
|
||||
handle->setBackingStore(this);
|
||||
|
||||
Q_UNUSED(region);
|
||||
Q_UNUSED(offset);
|
||||
|
@ -70,8 +70,8 @@ public:
|
||||
bool isRaster() const;
|
||||
|
||||
#ifndef QT_NO_OPENGL
|
||||
QOpenGLCompositorBackingStore *backingStore() { return m_backingStore; }
|
||||
void setBackingStore(QOpenGLCompositorBackingStore *backingStore);
|
||||
QOpenGLCompositorBackingStore *backingStore() const override { return m_backingStore; }
|
||||
void setBackingStore(QOpenGLCompositorBackingStore *backingStore) override;
|
||||
QWindow *sourceWindow() const override;
|
||||
const QPlatformTextureList *textures() const override;
|
||||
void endCompositing() override;
|
||||
|
Loading…
Reference in New Issue
Block a user