|
27 | 27 | # define EGL_CHECK(_call) _call |
28 | 28 | #endif // BGFX_CONFIG_DEBUG |
29 | 29 |
|
| 30 | +#if defined(WL_EGL_PLATFORM) |
| 31 | +# include <wayland-egl.h> |
| 32 | +#endif |
| 33 | + |
30 | 34 | namespace bgfx { namespace gl |
31 | 35 | { |
32 | 36 | #ifndef EGL_CONTEXT_FLAG_NO_ERROR_BIT_KHR |
@@ -329,6 +333,14 @@ EGL_IMPORT |
329 | 333 | vc_dispmanx_update_submit_sync(dispmanUpdate); |
330 | 334 | # endif // BX_PLATFORM_ANDROID |
331 | 335 |
|
| 336 | +# if BX_PLATFORM_LINUX && defined(WL_EGL_PLATFORM) |
| 337 | + if (g_platformData.type == NativeWindowHandleType::Wayland) { |
| 338 | + // A wl_surface needs to be first wrapped in a wl_egl_window |
| 339 | + // before it can be used to create the EGLSurface. |
| 340 | + m_egl_window = wl_egl_window_create((wl_surface*)nwh, _width, _height); |
| 341 | + nwh = m_egl_window; |
| 342 | + } |
| 343 | +# endif |
332 | 344 | if (headless) |
333 | 345 | { |
334 | 346 | EGLint pbAttribs[] = |
@@ -430,6 +442,11 @@ EGL_IMPORT |
430 | 442 | EGL_CHECK(eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT) ); |
431 | 443 | EGL_CHECK(eglDestroyContext(m_display, m_context) ); |
432 | 444 | EGL_CHECK(eglDestroySurface(m_display, m_surface) ); |
| 445 | +# if BX_PLATFORM_LINUX && defined(WL_EGL_PLATFORM) |
| 446 | + if (m_egl_window) { |
| 447 | + wl_egl_window_destroy(m_egl_window); |
| 448 | + } |
| 449 | +# endif |
433 | 450 | EGL_CHECK(eglTerminate(m_display) ); |
434 | 451 | m_context = NULL; |
435 | 452 | } |
@@ -461,6 +478,10 @@ EGL_IMPORT |
461 | 478 | } |
462 | 479 | # elif BX_PLATFORM_EMSCRIPTEN |
463 | 480 | EMSCRIPTEN_CHECK(emscripten_set_canvas_element_size(HTML5_TARGET_CANVAS_SELECTOR, _width, _height) ); |
| 481 | +# elif BX_PLATFORM_LINUX && defined(WL_EGL_PLATFORM) |
| 482 | + if (NULL != m_egl_window) { |
| 483 | + wl_egl_window_resize(m_egl_window, _width, _height, 0, 0); |
| 484 | + } |
464 | 485 | # else |
465 | 486 | BX_UNUSED(_width, _height); |
466 | 487 | # endif // BX_PLATFORM_* |
|
0 commit comments