From c4e63a582c75acaad9e8587ab8797fd59479a12c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Tue, 1 Sep 2020 19:49:50 +0200 Subject: [PATCH] OpenGLRenderer: initial support for X11 --- .../Wrapper/Linux/EGLContextX11.cpp | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Linux/EGLContextX11.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Linux/EGLContextX11.cpp index 85dc9d958..894ff155b 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Linux/EGLContextX11.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Linux/EGLContextX11.cpp @@ -12,8 +12,37 @@ namespace Nz::GL { assert(window.type == WindowManager::X11); - NazaraError("X11 is not yet supported"); - return false; + Destroy(); //< In case a previous display or surface hasn't been released + + m_params = params; + + if (!BindAPI()) + return false; + + m_display = m_loader.eglGetDisplay(static_cast(window.x11.display)); + if (!InitDisplay()) + return false; + + std::size_t configCount; + std::array configs; + if (!ChooseConfig(configs.data(), configs.size(), &configCount)) + return false; + + EGLint surfaceAttributes[] = { + EGL_NONE + }; + + ::Window winHandle = static_cast<::Window>(window.x11.window); + + std::size_t configIndex = 0; + for (; configIndex < configCount; ++configIndex) + { + m_surface = m_loader.eglCreateWindowSurface(m_display, configs[configIndex], winHandle, surfaceAttributes); + if (m_surface) + break; + } + + return CreateInternal(configs[configIndex], shareContext); } void EGLContextX11::Destroy()