The only one that does it differently is the DRM backend and it's just an extension that takes GBM into account, otherwise it's effectively copy-pasted code.
@ -86,7 +86,7 @@ public:
private:
bool initializeEgl();
bool initBufferConfigs();
bool initBufferConfigs() override;
bool initRenderingContext();
DrmBackend *m_backend;
@ -150,39 +150,6 @@ void VirtualEglBackend::removeOutput(Output *output)
m_outputs.erase(output);
}
bool VirtualEglBackend::initBufferConfigs()
{
const EGLint config_attribs[] = {
EGL_SURFACE_TYPE,
EGL_WINDOW_BIT,
EGL_RED_SIZE,
1,
EGL_GREEN_SIZE,
EGL_BLUE_SIZE,
EGL_ALPHA_SIZE,
0,
EGL_RENDERABLE_TYPE,
isOpenGLES() ? EGL_OPENGL_ES2_BIT : EGL_OPENGL_BIT,
EGL_CONFIG_CAVEAT,
EGL_NONE,
};
EGLint count;
EGLConfig configs[1024];
if (eglChooseConfig(eglDisplay(), config_attribs, configs, 1, &count) == EGL_FALSE) {
return false;
if (count != 1) {
setConfig(configs[0]);
return true;
std::unique_ptr<SurfaceTexture> VirtualEglBackend::createSurfaceTextureInternal(SurfacePixmapInternal *pixmap)
return std::make_unique<BasicEGLSurfaceTextureInternal>(this, pixmap);
@ -56,7 +56,6 @@ public:
void addOutput(Output *output);
@ -384,41 +384,6 @@ bool WaylandEglBackend::initRenderingContext()
return makeCurrent();
bool WaylandEglBackend::initBufferConfigs()
qCCritical(KWIN_WAYLAND_BACKEND) << "choose config failed";
qCCritical(KWIN_WAYLAND_BACKEND) << "choose config did not return a config" << count;
std::shared_ptr<KWin::GLTexture> WaylandEglBackend::textureForOutput(KWin::Output *output) const
auto texture = std::make_unique<GLTexture>(GL_RGBA8, output->pixelSize());
@ -143,7 +143,6 @@ public:
bool createEglWaylandOutput(Output *output);
void cleanupSurfaces() override;
@ -477,4 +477,39 @@ QHash<uint32_t, QVector<uint64_t>> AbstractEglBackend::supportedFormats() const
return RenderBackend::supportedFormats();
bool AbstractEglBackend::initBufferConfigs()
qCCritical(KWIN_OPENGL) << "choose config failed";
qCCritical(KWIN_OPENGL) << "choose config did not return a config" << count;
@ -87,6 +87,7 @@ protected:
bool hasClientExtension(const QByteArray &ext) const;
bool isOpenGLES() const;
bool createContext();
virtual bool initBufferConfigs();
EGLContext ensureGlobalShareContext();