diff --git a/src/backends/drm/drm_egl_cursor_layer.cpp b/src/backends/drm/drm_egl_cursor_layer.cpp index 841b7ab03a..c94a39ae22 100644 --- a/src/backends/drm/drm_egl_cursor_layer.cpp +++ b/src/backends/drm/drm_egl_cursor_layer.cpp @@ -22,7 +22,7 @@ EglGbmCursorLayer::EglGbmCursorLayer(EglGbmBackend *eglBackend, DrmPipeline *pip { } -OutputLayerBeginFrameInfo EglGbmCursorLayer::beginFrame() +std::optional EglGbmCursorLayer::beginFrame() { // some legacy drivers don't work with linear gbm buffers for the cursor const auto target = m_pipeline->gpu()->atomicModeSetting() ? EglGbmLayerSurface::BufferTarget::Linear : EglGbmLayerSurface::BufferTarget::Dumb; diff --git a/src/backends/drm/drm_egl_cursor_layer.h b/src/backends/drm/drm_egl_cursor_layer.h index 54a393c9a2..a195460003 100644 --- a/src/backends/drm/drm_egl_cursor_layer.h +++ b/src/backends/drm/drm_egl_cursor_layer.h @@ -29,7 +29,7 @@ class EglGbmCursorLayer : public DrmOverlayLayer public: EglGbmCursorLayer(EglGbmBackend *eglBackend, DrmPipeline *pipeline); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; void aboutToStartPainting(const QRegion &damagedRegion) override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; std::shared_ptr currentBuffer() const override; diff --git a/src/backends/drm/drm_egl_layer.cpp b/src/backends/drm/drm_egl_layer.cpp index 6bf238cc76..497a0270f3 100644 --- a/src/backends/drm/drm_egl_layer.cpp +++ b/src/backends/drm/drm_egl_layer.cpp @@ -36,7 +36,7 @@ EglGbmLayer::EglGbmLayer(EglGbmBackend *eglBackend, DrmPipeline *pipeline) { } -OutputLayerBeginFrameInfo EglGbmLayer::beginFrame() +std::optional EglGbmLayer::beginFrame() { m_scanoutBuffer.reset(); m_dmabufFeedback.renderingSurface(); diff --git a/src/backends/drm/drm_egl_layer.h b/src/backends/drm/drm_egl_layer.h index 073620cf76..d083add2c4 100644 --- a/src/backends/drm/drm_egl_layer.h +++ b/src/backends/drm/drm_egl_layer.h @@ -29,7 +29,7 @@ class EglGbmLayer : public DrmPipelineLayer public: EglGbmLayer(EglGbmBackend *eglBackend, DrmPipeline *pipeline); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; void aboutToStartPainting(const QRegion &damagedRegion) override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; bool scanout(SurfaceItem *surfaceItem) override; diff --git a/src/backends/drm/drm_egl_layer_surface.cpp b/src/backends/drm/drm_egl_layer_surface.cpp index 966007ae3d..dd143c299b 100644 --- a/src/backends/drm/drm_egl_layer_surface.cpp +++ b/src/backends/drm/drm_egl_layer_surface.cpp @@ -55,13 +55,13 @@ void EglGbmLayerSurface::destroyResources() m_oldGbmSurface.reset(); } -OutputLayerBeginFrameInfo EglGbmLayerSurface::startRendering(const QSize &bufferSize, DrmPlane::Transformations renderOrientation, DrmPlane::Transformations bufferOrientation, const QMap> &formats, BufferTarget target) +std::optional EglGbmLayerSurface::startRendering(const QSize &bufferSize, DrmPlane::Transformations renderOrientation, DrmPlane::Transformations bufferOrientation, const QMap> &formats, BufferTarget target) { if (!checkGbmSurface(bufferSize, formats, target == BufferTarget::Linear)) { - return {}; + return std::nullopt; } if (!m_gbmSurface->makeContextCurrent()) { - return {}; + return std::nullopt; } // shadow buffer @@ -75,11 +75,11 @@ OutputLayerBeginFrameInfo EglGbmLayerSurface::startRendering(const QSize &buffer if (renderOrientation != bufferOrientation) { const auto format = m_eglBackend->gbmFormatForDrmFormat(m_gbmSurface->format()); if (!format.has_value()) { - return {}; + return std::nullopt; } m_shadowBuffer = std::make_shared(renderSize, format.value()); if (!m_shadowBuffer->isComplete()) { - return {}; + return std::nullopt; } } else { m_shadowBuffer.reset(); diff --git a/src/backends/drm/drm_egl_layer_surface.h b/src/backends/drm/drm_egl_layer_surface.h index 1e1c731ec1..e88e26b9f0 100644 --- a/src/backends/drm/drm_egl_layer_surface.h +++ b/src/backends/drm/drm_egl_layer_surface.h @@ -46,7 +46,7 @@ public: Linear, Dumb }; - OutputLayerBeginFrameInfo startRendering(const QSize &bufferSize, DrmPlane::Transformations renderOrientation, DrmPlane::Transformations bufferOrientation, const QMap> &formats, BufferTarget target = BufferTarget::Normal); + std::optional startRendering(const QSize &bufferSize, DrmPlane::Transformations renderOrientation, DrmPlane::Transformations bufferOrientation, const QMap> &formats, BufferTarget target = BufferTarget::Normal); void aboutToStartPainting(DrmOutput *output, const QRegion &damagedRegion); std::optional, QRegion>> endRendering(DrmPlane::Transformations renderOrientation, const QRegion &damagedRegion, BufferTarget target = BufferTarget::Normal); diff --git a/src/backends/drm/drm_output.cpp b/src/backends/drm/drm_output.cpp index 74fb102a77..655b7bb78a 100644 --- a/src/backends/drm/drm_output.cpp +++ b/src/backends/drm/drm_output.cpp @@ -165,27 +165,26 @@ void DrmOutput::updateCursor() } return; } + bool rendered = false; const QMatrix4x4 monitorMatrix = logicalToNativeMatrix(geometry(), scale(), transform()); const QRect cursorRect = monitorMatrix.mapRect(cursor->geometry()); - if (cursorRect.width() > m_gpu->cursorSize().width() || cursorRect.height() > m_gpu->cursorSize().height()) { + if (cursorRect.width() <= m_gpu->cursorSize().width() && cursorRect.height() <= m_gpu->cursorSize().height()) { + if (const auto beginInfo = layer->beginFrame()) { + const auto &[renderTarget, repaint] = beginInfo.value(); + if (dynamic_cast(m_gpu->platform()->renderBackend())) { + renderCursorOpengl(renderTarget, cursor->geometry().size() * scale()); + } else { + renderCursorQPainter(renderTarget); + } + rendered = layer->endFrame(infiniteRegion(), infiniteRegion()); + } + } + if (!rendered) { if (layer->isVisible()) { layer->setVisible(false); m_pipeline->setCursor(); } m_setCursorSuccessful = false; - return; - } - const auto [renderTarget, repaint] = layer->beginFrame(); - if (dynamic_cast(m_gpu->platform()->renderBackend())) { - renderCursorOpengl(renderTarget, cursor->geometry().size() * scale()); - } else { - renderCursorQPainter(renderTarget); - } - bool rendered = layer->endFrame(infiniteRegion(), infiniteRegion()); - if (!rendered) { - m_setCursorSuccessful = false; - layer->setVisible(false); - return; } const QSize surfaceSize = m_gpu->cursorSize() / scale(); diff --git a/src/backends/drm/drm_qpainter_layer.cpp b/src/backends/drm/drm_qpainter_layer.cpp index f2ff4cfba8..3e39aeceaf 100644 --- a/src/backends/drm/drm_qpainter_layer.cpp +++ b/src/backends/drm/drm_qpainter_layer.cpp @@ -29,14 +29,14 @@ DrmQPainterLayer::DrmQPainterLayer(DrmPipeline *pipeline) { } -OutputLayerBeginFrameInfo DrmQPainterLayer::beginFrame() +std::optional DrmQPainterLayer::beginFrame() { if (!doesSwapchainFit()) { m_swapchain = std::make_shared(m_pipeline->gpu(), m_pipeline->bufferSize(), DRM_FORMAT_XRGB8888); } QRegion needsRepaint; if (!m_swapchain->acquireBuffer(&needsRepaint)) { - return {}; + return std::nullopt; } return OutputLayerBeginFrameInfo{ .renderTarget = RenderTarget(m_swapchain->currentBuffer()->image()), @@ -97,14 +97,14 @@ DrmCursorQPainterLayer::DrmCursorQPainterLayer(DrmPipeline *pipeline) { } -OutputLayerBeginFrameInfo DrmCursorQPainterLayer::beginFrame() +std::optional DrmCursorQPainterLayer::beginFrame() { if (!m_swapchain) { m_swapchain = std::make_shared(m_pipeline->gpu(), m_pipeline->gpu()->cursorSize(), DRM_FORMAT_ARGB8888); } QRegion needsRepaint; if (!m_swapchain->acquireBuffer(&needsRepaint)) { - return {}; + return std::nullopt; } return OutputLayerBeginFrameInfo{ .renderTarget = RenderTarget(m_swapchain->currentBuffer()->image()), @@ -148,7 +148,7 @@ DrmVirtualQPainterLayer::DrmVirtualQPainterLayer(DrmVirtualOutput *output) { } -OutputLayerBeginFrameInfo DrmVirtualQPainterLayer::beginFrame() +std::optional DrmVirtualQPainterLayer::beginFrame() { if (m_image.isNull() || m_image.size() != m_output->pixelSize()) { m_image = QImage(m_output->pixelSize(), QImage::Format_RGB32); diff --git a/src/backends/drm/drm_qpainter_layer.h b/src/backends/drm/drm_qpainter_layer.h index df8389d712..67d3a47641 100644 --- a/src/backends/drm/drm_qpainter_layer.h +++ b/src/backends/drm/drm_qpainter_layer.h @@ -26,7 +26,7 @@ class DrmQPainterLayer : public DrmPipelineLayer public: DrmQPainterLayer(DrmPipeline *pipeline); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &damagedRegion, const QRegion &renderedRegion) override; bool checkTestBuffer() override; std::shared_ptr currentBuffer() const override; @@ -46,7 +46,7 @@ class DrmCursorQPainterLayer : public DrmOverlayLayer public: DrmCursorQPainterLayer(DrmPipeline *pipeline); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &damagedRegion, const QRegion &renderedRegion) override; bool checkTestBuffer() override; @@ -64,7 +64,7 @@ class DrmVirtualQPainterLayer : public DrmOutputLayer public: DrmVirtualQPainterLayer(DrmVirtualOutput *output); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &damagedRegion, const QRegion &renderedRegion) override; QRegion currentDamage() const override; diff --git a/src/backends/drm/drm_virtual_egl_layer.cpp b/src/backends/drm/drm_virtual_egl_layer.cpp index 9affdaa8ec..07cc3af32b 100644 --- a/src/backends/drm/drm_virtual_egl_layer.cpp +++ b/src/backends/drm/drm_virtual_egl_layer.cpp @@ -52,7 +52,7 @@ void VirtualEglGbmLayer::aboutToStartPainting(const QRegion &damagedRegion) } } -OutputLayerBeginFrameInfo VirtualEglGbmLayer::beginFrame() +std::optional VirtualEglGbmLayer::beginFrame() { // gbm surface if (doesGbmSurfaceFit(m_gbmSurface.get())) { @@ -62,12 +62,12 @@ OutputLayerBeginFrameInfo VirtualEglGbmLayer::beginFrame() m_gbmSurface = m_oldGbmSurface; } else { if (!createGbmSurface()) { - return {}; + return std::nullopt; } } } if (!m_gbmSurface->makeContextCurrent()) { - return {}; + return std::nullopt; } GLFramebuffer::pushFramebuffer(m_gbmSurface->fbo()); return OutputLayerBeginFrameInfo{ diff --git a/src/backends/drm/drm_virtual_egl_layer.h b/src/backends/drm/drm_virtual_egl_layer.h index 6ae06759e8..46efd89c3a 100644 --- a/src/backends/drm/drm_virtual_egl_layer.h +++ b/src/backends/drm/drm_virtual_egl_layer.h @@ -35,7 +35,7 @@ public: VirtualEglGbmLayer(EglGbmBackend *eglBackend, DrmVirtualOutput *output); void aboutToStartPainting(const QRegion &damagedRegion) override; - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; bool scanout(SurfaceItem *surfaceItem) override; diff --git a/src/backends/virtual/virtual_egl_backend.cpp b/src/backends/virtual/virtual_egl_backend.cpp index 389f148157..ba0239c352 100644 --- a/src/backends/virtual/virtual_egl_backend.cpp +++ b/src/backends/virtual/virtual_egl_backend.cpp @@ -37,7 +37,7 @@ GLTexture *VirtualEglLayer::texture() const return m_texture.get(); } -OutputLayerBeginFrameInfo VirtualEglLayer::beginFrame() +std::optional VirtualEglLayer::beginFrame() { m_backend->makeCurrent(); diff --git a/src/backends/virtual/virtual_egl_backend.h b/src/backends/virtual/virtual_egl_backend.h index 6423889293..6fada54d18 100644 --- a/src/backends/virtual/virtual_egl_backend.h +++ b/src/backends/virtual/virtual_egl_backend.h @@ -24,7 +24,7 @@ public: VirtualEglLayer(Output *output, VirtualEglBackend *backend); ~VirtualEglLayer() override; - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; GLTexture *texture() const; diff --git a/src/backends/virtual/virtual_qpainter_backend.cpp b/src/backends/virtual/virtual_qpainter_backend.cpp index f954a6f17c..5f24b949b3 100644 --- a/src/backends/virtual/virtual_qpainter_backend.cpp +++ b/src/backends/virtual/virtual_qpainter_backend.cpp @@ -23,7 +23,7 @@ VirtualQPainterLayer::VirtualQPainterLayer(Output *output) m_image.fill(Qt::black); } -OutputLayerBeginFrameInfo VirtualQPainterLayer::beginFrame() +std::optional VirtualQPainterLayer::beginFrame() { return OutputLayerBeginFrameInfo{ .renderTarget = RenderTarget(&m_image), diff --git a/src/backends/virtual/virtual_qpainter_backend.h b/src/backends/virtual/virtual_qpainter_backend.h index a9ab2083e0..f882b5361c 100644 --- a/src/backends/virtual/virtual_qpainter_backend.h +++ b/src/backends/virtual/virtual_qpainter_backend.h @@ -26,7 +26,7 @@ class VirtualQPainterLayer : public OutputLayer public: VirtualQPainterLayer(Output *output); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; QImage *image(); @@ -54,4 +54,4 @@ private: int m_frameCounter = 0; }; -} // namespace KWin \ No newline at end of file +} // namespace KWin diff --git a/src/backends/wayland/wayland_egl_backend.cpp b/src/backends/wayland/wayland_egl_backend.cpp index 3a214f1fab..f166524fa7 100644 --- a/src/backends/wayland/wayland_egl_backend.cpp +++ b/src/backends/wayland/wayland_egl_backend.cpp @@ -142,7 +142,7 @@ bool WaylandEglOutput::makeContextCurrent() const return true; } -OutputLayerBeginFrameInfo WaylandEglOutput::beginFrame() +std::optional WaylandEglOutput::beginFrame() { eglWaitNative(EGL_CORE_NATIVE_ENGINE); makeContextCurrent(); diff --git a/src/backends/wayland/wayland_egl_backend.h b/src/backends/wayland/wayland_egl_backend.h index d2cac341dd..14b438d799 100644 --- a/src/backends/wayland/wayland_egl_backend.h +++ b/src/backends/wayland/wayland_egl_backend.h @@ -47,7 +47,7 @@ public: bool makeContextCurrent() const; void present(); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; void aboutToStartPainting(const QRegion &damage) override; diff --git a/src/backends/wayland/wayland_qpainter_backend.cpp b/src/backends/wayland/wayland_qpainter_backend.cpp index ef3038cdb6..818f503520 100644 --- a/src/backends/wayland/wayland_qpainter_backend.cpp +++ b/src/backends/wayland/wayland_qpainter_backend.cpp @@ -127,7 +127,7 @@ QRegion WaylandQPainterOutput::accumulateDamage(int bufferAge) const return m_damageJournal.accumulate(bufferAge, infiniteRegion()); } -OutputLayerBeginFrameInfo WaylandQPainterOutput::beginFrame() +std::optional WaylandQPainterOutput::beginFrame() { WaylandQPainterBufferSlot *slot = acquire(); return OutputLayerBeginFrameInfo{ diff --git a/src/backends/wayland/wayland_qpainter_backend.h b/src/backends/wayland/wayland_qpainter_backend.h index b3f40e76ee..063eff817d 100644 --- a/src/backends/wayland/wayland_qpainter_backend.h +++ b/src/backends/wayland/wayland_qpainter_backend.h @@ -52,7 +52,7 @@ public: WaylandQPainterOutput(WaylandOutput *output); ~WaylandQPainterOutput() override; - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; bool init(KWayland::Client::ShmPool *pool); diff --git a/src/backends/x11/standalone/x11_standalone_egl_backend.cpp b/src/backends/x11/standalone/x11_standalone_egl_backend.cpp index 91b258425d..0b219a7b98 100644 --- a/src/backends/x11/standalone/x11_standalone_egl_backend.cpp +++ b/src/backends/x11/standalone/x11_standalone_egl_backend.cpp @@ -32,7 +32,7 @@ EglLayer::EglLayer(EglBackend *backend) { } -OutputLayerBeginFrameInfo EglLayer::beginFrame() +std::optional EglLayer::beginFrame() { return m_backend->beginFrame(); } diff --git a/src/backends/x11/standalone/x11_standalone_egl_backend.h b/src/backends/x11/standalone/x11_standalone_egl_backend.h index a94096a301..4a93685b1c 100644 --- a/src/backends/x11/standalone/x11_standalone_egl_backend.h +++ b/src/backends/x11/standalone/x11_standalone_egl_backend.h @@ -27,7 +27,7 @@ class EglLayer : public OutputLayer public: EglLayer(EglBackend *backend); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; private: diff --git a/src/backends/x11/standalone/x11_standalone_glx_backend.cpp b/src/backends/x11/standalone/x11_standalone_glx_backend.cpp index 40f2a7a614..07c7c16a32 100644 --- a/src/backends/x11/standalone/x11_standalone_glx_backend.cpp +++ b/src/backends/x11/standalone/x11_standalone_glx_backend.cpp @@ -109,7 +109,7 @@ GlxLayer::GlxLayer(GlxBackend *backend) { } -OutputLayerBeginFrameInfo GlxLayer::beginFrame() +std::optional GlxLayer::beginFrame() { return m_backend->beginFrame(); } diff --git a/src/backends/x11/standalone/x11_standalone_glx_backend.h b/src/backends/x11/standalone/x11_standalone_glx_backend.h index 2769c4619a..52e6e043a3 100644 --- a/src/backends/x11/standalone/x11_standalone_glx_backend.h +++ b/src/backends/x11/standalone/x11_standalone_glx_backend.h @@ -64,7 +64,7 @@ class GlxLayer : public OutputLayer public: GlxLayer(GlxBackend *backend); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; private: diff --git a/src/backends/x11/windowed/x11_windowed_egl_backend.cpp b/src/backends/x11/windowed/x11_windowed_egl_backend.cpp index 0cf7701ed2..386c318a87 100644 --- a/src/backends/x11/windowed/x11_windowed_egl_backend.cpp +++ b/src/backends/x11/windowed/x11_windowed_egl_backend.cpp @@ -38,7 +38,7 @@ void X11WindowedEglOutput::ensureFbo() } } -OutputLayerBeginFrameInfo X11WindowedEglOutput::beginFrame() +std::optional X11WindowedEglOutput::beginFrame() { eglMakeCurrent(m_backend->eglDisplay(), m_eglSurface, m_eglSurface, m_backend->context()); ensureFbo(); diff --git a/src/backends/x11/windowed/x11_windowed_egl_backend.h b/src/backends/x11/windowed/x11_windowed_egl_backend.h index 54497d873c..7219d450f6 100644 --- a/src/backends/x11/windowed/x11_windowed_egl_backend.h +++ b/src/backends/x11/windowed/x11_windowed_egl_backend.h @@ -26,7 +26,7 @@ public: X11WindowedEglOutput(X11WindowedEglBackend *backend, Output *output, EGLSurface surface); ~X11WindowedEglOutput(); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; EGLSurface surface() const; QRegion lastDamage() const; diff --git a/src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp b/src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp index 89c8dea17c..6e468928ec 100644 --- a/src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp +++ b/src/backends/x11/windowed/x11_windowed_qpainter_backend.cpp @@ -30,7 +30,7 @@ void X11WindowedQPainterOutput::ensureBuffer() } } -OutputLayerBeginFrameInfo X11WindowedQPainterOutput::beginFrame() +std::optional X11WindowedQPainterOutput::beginFrame() { ensureBuffer(); return OutputLayerBeginFrameInfo{ diff --git a/src/backends/x11/windowed/x11_windowed_qpainter_backend.h b/src/backends/x11/windowed/x11_windowed_qpainter_backend.h index d6f7d70f0c..796e498209 100644 --- a/src/backends/x11/windowed/x11_windowed_qpainter_backend.h +++ b/src/backends/x11/windowed/x11_windowed_qpainter_backend.h @@ -31,7 +31,7 @@ public: void ensureBuffer(); - OutputLayerBeginFrameInfo beginFrame() override; + std::optional beginFrame() override; bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; xcb_window_t window; diff --git a/src/composite.cpp b/src/composite.cpp index ee88e43a69..6cbe21f6d7 100644 --- a/src/composite.cpp +++ b/src/composite.cpp @@ -646,14 +646,16 @@ void Compositor::composite(RenderLoop *renderLoop) outputLayer->resetRepaints(); preparePaintPass(superLayer, &surfaceDamage); - OutputLayerBeginFrameInfo beginInfo = outputLayer->beginFrame(); - beginInfo.renderTarget.setDevicePixelRatio(output->scale()); + if (auto beginInfo = outputLayer->beginFrame()) { + auto &[renderTarget, repaint] = beginInfo.value(); + renderTarget.setDevicePixelRatio(output->scale()); - const QRegion bufferDamage = surfaceDamage.united(beginInfo.repaint).intersected(superLayer->rect()); - outputLayer->aboutToStartPainting(bufferDamage); + const QRegion bufferDamage = surfaceDamage.united(repaint).intersected(superLayer->rect()); + outputLayer->aboutToStartPainting(bufferDamage); - paintPass(superLayer, &beginInfo.renderTarget, bufferDamage); - outputLayer->endFrame(bufferDamage, surfaceDamage); + paintPass(superLayer, &renderTarget, bufferDamage); + outputLayer->endFrame(bufferDamage, surfaceDamage); + } } renderLoop->endFrame(); diff --git a/src/outputlayer.h b/src/outputlayer.h index 7bd28608e7..6a5a575438 100644 --- a/src/outputlayer.h +++ b/src/outputlayer.h @@ -11,6 +11,7 @@ #include #include +#include namespace KWin { @@ -40,7 +41,7 @@ public: */ virtual void aboutToStartPainting(const QRegion &damage); - virtual OutputLayerBeginFrameInfo beginFrame() = 0; + virtual std::optional beginFrame() = 0; virtual bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) = 0; /**