1041ef8275
When the last output gets disconnected, create a virtual output as a placeholder until we have access to a physical output again. While this placecholder never gets rendered to, with virtual outputs in general that is possible (with gbm and qpainter atm) and can be done for future use cases like wireless displays. CCBUG: 420160 CCBUG: 438839
51 lines
1.1 KiB
C++
51 lines
1.1 KiB
C++
/*
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
#ifndef KWIN_SCENE_QPAINTER_DRM_BACKEND_H
|
|
#define KWIN_SCENE_QPAINTER_DRM_BACKEND_H
|
|
#include "qpainterbackend.h"
|
|
#include "utils.h"
|
|
|
|
#include <QObject>
|
|
#include <QVector>
|
|
#include <QSharedPointer>
|
|
|
|
#include "dumb_swapchain.h"
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
class DrmBackend;
|
|
class DrmDumbBuffer;
|
|
class DrmAbstractOutput;
|
|
class DrmGpu;
|
|
|
|
class DrmQPainterBackend : public QPainterBackend
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
DrmQPainterBackend(DrmBackend *backend, DrmGpu *gpu);
|
|
|
|
QImage *bufferForScreen(int screenId) override;
|
|
QRegion beginFrame(int screenId) override;
|
|
void endFrame(int screenId, const QRegion &damage) override;
|
|
|
|
private:
|
|
void initOutput(DrmAbstractOutput *output);
|
|
struct Output {
|
|
DrmAbstractOutput *output;
|
|
QSharedPointer<DumbSwapchain> swapchain;
|
|
DamageJournal damageJournal;
|
|
};
|
|
QVector<Output> m_outputs;
|
|
DrmBackend *m_backend;
|
|
DrmGpu *m_gpu;
|
|
};
|
|
}
|
|
|
|
#endif
|