backends/drm: fix damage tracking for virtual outputs

master
Xaver Hugl 2 years ago
parent 3de377e461
commit a343af674b

@ -86,8 +86,9 @@ OutputLayerBeginFrameInfo VirtualEglGbmLayer::beginFrame()
void VirtualEglGbmLayer::endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion)
{
Q_UNUSED(renderedRegion);
GLFramebuffer::popFramebuffer();
const auto buffer = m_gbmSurface->swapBuffers(damagedRegion.intersected(m_output->geometry()));
const auto buffer = m_gbmSurface->swapBuffers(damagedRegion);
if (buffer) {
m_currentBuffer = buffer;
m_currentDamage = damagedRegion;
@ -170,21 +171,10 @@ bool VirtualEglGbmLayer::scanout(SurfaceItem *surfaceItem)
return false;
}
// damage tracking for screen casting
QRegion damage;
if (m_scanoutSurface == item->surface()) {
QRegion trackedDamage = surfaceItem->damage();
surfaceItem->resetDamage();
for (const auto &rect : trackedDamage) {
auto damageRect = QRect(rect);
damageRect.translate(m_output->geometry().topLeft());
damage |= damageRect;
}
} else {
damage = m_output->geometry();
}
m_currentDamage = m_scanoutSurface == item->surface() ? surfaceItem->damage() : infiniteRegion();
surfaceItem->resetDamage();
m_scanoutSurface = item->surface();
m_currentBuffer = scanoutBuffer;
m_currentDamage = damage;
return true;
}

Loading…
Cancel
Save