/* KWin - the KDE window manager This file is part of the KDE project. SPDX-FileCopyrightText: 2017 Roman Gilg SPDX-FileCopyrightText: 2015 Martin Gräßlin SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef KWIN_DRM_BUFFER_GBM_H #define KWIN_DRM_BUFFER_GBM_H #include "drm_buffer.h" #include struct gbm_bo; namespace KWaylandServer { class BufferInterface; } namespace KWin { class GbmSurface; class GbmBuffer : public QObject { Q_OBJECT public: GbmBuffer(const QSharedPointer &surface); GbmBuffer(gbm_bo *buffer, KWaylandServer::BufferInterface *bufferInterface); virtual ~GbmBuffer(); gbm_bo* getBo() const { return m_bo; } void releaseBuffer(); protected: QSharedPointer m_surface; gbm_bo *m_bo = nullptr; KWaylandServer::BufferInterface *m_bufferInterface = nullptr; void clearBufferInterface(); }; class DrmGbmBuffer : public DrmBuffer, public GbmBuffer { public: DrmGbmBuffer(DrmGpu *gpu, const QSharedPointer &surface); DrmGbmBuffer(DrmGpu *gpu, gbm_bo *buffer, KWaylandServer::BufferInterface *bufferInterface); ~DrmGbmBuffer() override; bool needsModeChange(DrmBuffer *b) const override { if (DrmGbmBuffer *sb = dynamic_cast(b)) { return hasBo() != sb->hasBo(); } else { return true; } } void releaseGbm() override; bool hasBo() const { return m_bo != nullptr; } private: void initialize(); }; } #endif