File indexing completed on 2025-04-20 10:57:36
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 2022 Xaver Hugl <xaver.hugl@gmail.com> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 #pragma once 0010 #include "drm_layer.h" 0011 0012 #include <QImage> 0013 0014 namespace KWin 0015 { 0016 0017 class DumbSwapchain; 0018 class DrmPipeline; 0019 class DrmVirtualOutput; 0020 class DrmQPainterBackend; 0021 class DrmDumbBuffer; 0022 class DrmFramebuffer; 0023 0024 class DrmQPainterLayer : public DrmPipelineLayer 0025 { 0026 public: 0027 DrmQPainterLayer(DrmPipeline *pipeline); 0028 0029 std::optional<OutputLayerBeginFrameInfo> beginFrame() override; 0030 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; 0031 bool checkTestBuffer() override; 0032 std::shared_ptr<DrmFramebuffer> currentBuffer() const override; 0033 QRegion currentDamage() const override; 0034 void releaseBuffers() override; 0035 0036 private: 0037 bool doesSwapchainFit() const; 0038 0039 std::shared_ptr<DumbSwapchain> m_swapchain; 0040 std::shared_ptr<DrmFramebuffer> m_currentFramebuffer; 0041 QRegion m_currentDamage; 0042 }; 0043 0044 class DrmCursorQPainterLayer : public DrmOverlayLayer 0045 { 0046 public: 0047 DrmCursorQPainterLayer(DrmPipeline *pipeline); 0048 0049 std::optional<OutputLayerBeginFrameInfo> beginFrame() override; 0050 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; 0051 0052 bool checkTestBuffer() override; 0053 std::shared_ptr<DrmFramebuffer> currentBuffer() const override; 0054 QRegion currentDamage() const override; 0055 void releaseBuffers() override; 0056 0057 private: 0058 std::shared_ptr<DumbSwapchain> m_swapchain; 0059 std::shared_ptr<DrmFramebuffer> m_currentFramebuffer; 0060 }; 0061 0062 class DrmVirtualQPainterLayer : public DrmOutputLayer 0063 { 0064 public: 0065 DrmVirtualQPainterLayer(DrmVirtualOutput *output); 0066 0067 std::optional<OutputLayerBeginFrameInfo> beginFrame() override; 0068 bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override; 0069 0070 QRegion currentDamage() const override; 0071 void releaseBuffers() override; 0072 0073 private: 0074 QImage m_image; 0075 QRegion m_currentDamage; 0076 DrmVirtualOutput *const m_output; 0077 }; 0078 }