diff --git a/src/common/gl/context_egl_wayland.cpp b/src/common/gl/context_egl_wayland.cpp index 347ca6f2c..49596e152 100644 --- a/src/common/gl/context_egl_wayland.cpp +++ b/src/common/gl/context_egl_wayland.cpp @@ -5,7 +5,11 @@ Log_SetChannel(GL::ContextEGLWayland); namespace GL { ContextEGLWayland::ContextEGLWayland(const WindowInfo& wi) : ContextEGL(wi) {} -ContextEGLWayland::~ContextEGLWayland() = default; +ContextEGLWayland::~ContextEGLWayland() +{ + if (m_wl_window) + wl_egl_window_destroy(m_wl_window); +} std::unique_ptr ContextEGLWayland::Create(const WindowInfo& wi, const Version* versions_to_try, size_t num_versions_to_try) @@ -28,13 +32,27 @@ std::unique_ptr ContextEGLWayland::CreateSharedContext(const WindowInfo return context; } +void ContextEGLWayland::ResizeSurface(u32 new_surface_width, u32 new_surface_height) +{ + if (m_wl_window) + wl_egl_window_resize(m_wl_window, new_surface_width, new_surface_height, 0, 0); + + ContextEGL::ResizeSurface(new_surface_width, new_surface_height); +} + EGLNativeWindowType ContextEGLWayland::GetNativeWindow(EGLConfig config) { - wl_egl_window* window = + if (m_wl_window) + { + wl_egl_window_destroy(m_wl_window); + m_wl_window = nullptr; + } + + m_wl_window = wl_egl_window_create(static_cast(m_wi.window_handle), m_wi.surface_width, m_wi.surface_height); - if (!window) + if (!m_wl_window) return {}; - return reinterpret_cast(window); + return reinterpret_cast(m_wl_window); } } // namespace GL diff --git a/src/common/gl/context_egl_wayland.h b/src/common/gl/context_egl_wayland.h index b1d9848ec..d57dd82ac 100644 --- a/src/common/gl/context_egl_wayland.h +++ b/src/common/gl/context_egl_wayland.h @@ -1,5 +1,6 @@ #pragma once #include "context_egl.h" +#include namespace GL { @@ -13,9 +14,13 @@ public: size_t num_versions_to_try); std::unique_ptr CreateSharedContext(const WindowInfo& wi) override; + void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) override; protected: EGLNativeWindowType GetNativeWindow(EGLConfig config) override; + +private: + wl_egl_window* m_wl_window = nullptr; }; } // namespace GL