kwin/src/plugins/platforms/drm/egl_multi_backend.h

55 lines
1.5 KiB
C
Raw Normal View History

/*
KWin - the KDE window manager
This file is part of the KDE project.
SPDX-FileCopyrightText: 2020 Xaver Hugl <xaver.hugl@gmail.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef EGLMULTIBACKEND_H
#define EGLMULTIBACKEND_H
#include "abstract_egl_drm_backend.h"
namespace KWin
{
class EglMultiBackend : public OpenGLBackend
{
2021-04-27 11:49:53 +00:00
Q_OBJECT
public:
2021-04-27 11:49:53 +00:00
EglMultiBackend(DrmBackend *backend, AbstractEglDrmBackend *primaryEglBackend);
~EglMultiBackend();
void init() override;
QRegion beginFrame(AbstractOutput *output) override;
void endFrame(AbstractOutput *output, const QRegion &damage, const QRegion &damagedRegion) override;
bool scanout(AbstractOutput *output, SurfaceItem *surfaceItem) override;
bool makeCurrent() override;
void doneCurrent() override;
PlatformSurfaceTexture *createPlatformSurfaceTextureInternal(SurfacePixmapInternal *pixmap) override;
PlatformSurfaceTexture *createPlatformSurfaceTextureWayland(SurfacePixmapWayland *pixmap) override;
QSharedPointer<GLTexture> textureForOutput(AbstractOutput *requestedOutput) const override;
bool directScanoutAllowed(AbstractOutput *output) const override;
2021-04-27 11:49:53 +00:00
public Q_SLOTS:
void addGpu(DrmGpu *gpu);
void removeGpu(DrmGpu *gpu);
private:
2021-04-27 11:49:53 +00:00
DrmBackend *m_platform;
QVector<AbstractEglDrmBackend*> m_backends;
bool m_initialized = false;
AbstractEglDrmBackend *findBackend(AbstractOutput *output) const;
};
}
#endif // EGLMULTIBACKEND_H