eglfs: Revive QWidget rendering

After recent changes to widgets and backingstores, attempting to run
any widget-based application with eglfs resulted in a crash. The
backingstore implementation used here was not fully migrated. Update
flush() to create the rendering infrastructure if needed, and make it
call into rhiFlush().

Amends eb4cb719257d3b57cd801273d4011579d8c81714

Change-Id: I253c37200f5a902a0e61b62581ac456549f3aeba
Fixes: QTBUG-126221
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
(cherry picked from commit 0a10d23c4a49dd14a1ded41b7cc6921909b0ee7a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Laszlo Agocs 2024-06-12 09:53:47 +02:00 committed by Qt Cherry-pick Bot
parent 885a49548d
commit aca3b95700

View File

@ -134,36 +134,24 @@ void QOpenGLCompositorBackingStore::updateTexture()
} }
} }
void QOpenGLCompositorBackingStore::flush(QWindow *window, const QRegion &region, const QPoint &offset) void QOpenGLCompositorBackingStore::flush(QWindow *flushedWindow, const QRegion &region, const QPoint &offset)
{ {
// Called for ordinary raster windows. // Called for ordinary raster windows.
auto *handle = dynamic_cast<QOpenGLCompositorWindow *>(window->handle());
if (handle && !handle->backingStore())
handle->setBackingStore(this);
Q_UNUSED(region); Q_UNUSED(region);
Q_UNUSED(offset); Q_UNUSED(offset);
m_rhi = rhi(window); if (!rhi(flushedWindow)) {
Q_ASSERT(m_rhi); QPlatformBackingStoreRhiConfig rhiConfig;
rhiConfig.setApi(QPlatformBackingStoreRhiConfig::OpenGL);
rhiConfig.setEnabled(true);
createRhi(flushedWindow, rhiConfig);
}
QOpenGLCompositor *compositor = QOpenGLCompositor::instance(); static QPlatformTextureList emptyTextureList;
QOpenGLContext *dstCtx = compositor->context(); bool translucentBackground = m_image.hasAlphaChannel();
if (!dstCtx) rhiFlush(flushedWindow, flushedWindow->devicePixelRatio(),
return; region, offset, &emptyTextureList, translucentBackground);
QWindow *dstWin = compositor->targetWindow();
if (!dstWin)
return;
if (!dstCtx->makeCurrent(dstWin))
return;
updateTexture();
m_textures->clear();
m_textures->appendTexture(nullptr, m_bsTextureWrapper, window->geometry());
compositor->update();
} }
QPlatformBackingStore::FlushResult QOpenGLCompositorBackingStore::rhiFlush(QWindow *window, QPlatformBackingStore::FlushResult QOpenGLCompositorBackingStore::rhiFlush(QWindow *window,