backends/drm: restrict damage area to the screen's size

Scissor rectangles going outside of the framebuffer cause OpenGL warnings

BUG: 492152
wilder/Plasma/6.3
Xaver Hugl 1 year ago committed by Vlad Zahorodnii
parent 5334682b6e
commit de12db7398
  1. 4
      src/backends/drm/drm_egl_layer_surface.cpp

@ -193,7 +193,7 @@ bool EglGbmLayerSurface::endRendering(const QRegion &damagedRegion, OutputFrame
m_surface->shadowDamageJournal.add(damagedRegion);
QRegion repaint;
for (const QRect &rect : logicalRepaint) {
repaint |= scaledRect(rect, m_surface->scale).toAlignedRect();
repaint |= scaledRect(rect, m_surface->scale).toAlignedRect() & QRect(QPoint(), m_surface->gbmSwapchain->size());
}
GLFramebuffer *fbo = m_surface->currentSlot->framebuffer();
@ -609,7 +609,7 @@ std::shared_ptr<DrmFramebuffer> EglGbmLayerSurface::importWithEgl(Surface *surfa
for (const QRect &logical : damagedRegion) {
deviceDamage |= scaledRect(logical, surface->scale).toAlignedRect();
}
const QRegion repaint = deviceDamage | surface->importDamageJournal.accumulate(slot->age(), infiniteRegion());
const QRegion repaint = (deviceDamage | surface->importDamageJournal.accumulate(slot->age(), infiniteRegion())) & QRect(QPoint(), m_surface->gbmSwapchain->size());
surface->importDamageJournal.add(deviceDamage);
GLFramebuffer *fbo = slot->framebuffer();

Loading…
Cancel
Save