From 34e7f69d6942bd37361f27c5894edc9f522d49e1 Mon Sep 17 00:00:00 2001 From: Brandon Dowdy Date: Thu, 28 Jan 2021 23:13:53 +0000 Subject: [PATCH] examples: remove dependency on wlr_egl from clients The specified clients in this commit used to rely on wlr_egl and some of its related functions in order to render surfaces. This is no longer the case as of this commit. --- examples/egl_common.c | 127 ++++++++++++++++++++++++ examples/egl_common.h | 19 ++++ examples/idle-inhibit.c | 12 +-- examples/input-inhibitor.c | 12 +-- examples/keyboard-shortcuts-inhibit.c | 12 +-- examples/layer-shell.c | 27 ++--- examples/meson.build | 16 +-- examples/pointer-constraints.c | 12 +-- examples/relative-pointer-unstable-v1.c | 17 ++-- examples/text-input.c | 12 +-- examples/toplevel-decoration.c | 12 +-- 11 files changed, 212 insertions(+), 66 deletions(-) create mode 100644 examples/egl_common.c create mode 100644 examples/egl_common.h diff --git a/examples/egl_common.c b/examples/egl_common.c new file mode 100644 index 00000000..0a53f543 --- /dev/null +++ b/examples/egl_common.c @@ -0,0 +1,127 @@ +#define _POSIX_C_SOURCE 200809L +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "egl_common.h" + +EGLDisplay egl_display; +EGLConfig egl_config; +EGLContext egl_context; + +PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT; +PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC eglCreatePlatformWindowSurfaceEXT; + +EGLint config_attribs[] = { + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_RED_SIZE, 1, + EGL_GREEN_SIZE, 1, + EGL_BLUE_SIZE, 1, + EGL_ALPHA_SIZE, 1, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_NONE, +}; + +EGLint context_attribs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_NONE, +}; + +bool egl_init(struct wl_display *display) { + const char *client_exts_str = + eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); + if (client_exts_str == NULL) { + if (eglGetError() == EGL_BAD_DISPLAY) { + wlr_log(WLR_ERROR, + "EGL_EXT_client_extensions not supported"); + } else { + wlr_log(WLR_ERROR, + "Failed to query EGL client extensions"); + } + return false; + } + + if (!strstr(client_exts_str, "EGL_EXT_platform_base")) { + wlr_log(WLR_ERROR, "EGL_EXT_platform_base not supported"); + return false; + } + + if (!strstr(client_exts_str, "EGL_EXT_platform_wayland")) { + wlr_log(WLR_ERROR, "EGL_EXT_platform_wayland not supported"); + return false; + } + + eglGetPlatformDisplayEXT = + (void *)eglGetProcAddress("eglGetPlatformDisplayEXT"); + if (eglGetPlatformDisplayEXT == NULL) { + wlr_log(WLR_ERROR, "Failed to get eglGetPlatformDisplayEXT"); + return false; + } + + eglCreatePlatformWindowSurfaceEXT = + (void *)eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"); + if (eglCreatePlatformWindowSurfaceEXT == NULL) { + wlr_log(WLR_ERROR, + "Failed to get eglCreatePlatformWindowSurfaceEXT"); + return false; + } + + egl_display = + eglGetPlatformDisplayEXT(EGL_PLATFORM_WAYLAND_EXT, + display, NULL); + if (egl_display == EGL_NO_DISPLAY) { + wlr_log(WLR_ERROR, "Failed to create EGL display"); + goto error; + } + + EGLint major, minor; + if (eglInitialize(egl_display, &major, &minor) == EGL_FALSE) { + wlr_log(WLR_ERROR, "Failed to initialize EGL"); + goto error; + } + + EGLint matched = 0; + if (!eglChooseConfig(egl_display, config_attribs, + &egl_config, 1, &matched)) { + wlr_log(WLR_ERROR, "eglChooseConfig failed"); + goto error; + } + if (matched == 0) { + wlr_log(WLR_ERROR, "Failed to match an EGL config"); + goto error; + } + + egl_context = + eglCreateContext(egl_display, egl_config, + EGL_NO_CONTEXT, context_attribs); + if (egl_context == EGL_NO_CONTEXT) { + wlr_log(WLR_ERROR, "Failed to create EGL context"); + goto error; + } + + return true; + +error: + eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, + EGL_NO_SURFACE, EGL_NO_CONTEXT); + if (egl_display) { + eglTerminate(egl_display); + } + eglReleaseThread(); + return false; +} + +void egl_finish(void) { + eglMakeCurrent(egl_display, EGL_NO_SURFACE, + EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglDestroyContext(egl_display, egl_context); + eglTerminate(egl_display); + eglReleaseThread(); +} diff --git a/examples/egl_common.h b/examples/egl_common.h new file mode 100644 index 00000000..f12c05be --- /dev/null +++ b/examples/egl_common.h @@ -0,0 +1,19 @@ +#ifndef _EGL_COMMON_H +#define _EGL_COMMON_H +#endif + +#include +#include + +#include +#include + +extern EGLDisplay egl_display; +extern EGLConfig egl_config; +extern EGLContext egl_context; + +extern PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC eglCreatePlatformWindowSurfaceEXT; + +bool egl_init(struct wl_display *display); + +void egl_finish(void); diff --git a/examples/idle-inhibit.c b/examples/idle-inhibit.c index 7037681f..9cf46831 100644 --- a/examples/idle-inhibit.c +++ b/examples/idle-inhibit.c @@ -5,6 +5,7 @@ #include #include #include +#include "egl_common.h" #include "idle-inhibit-unstable-v1-client-protocol.h" #include "xdg-shell-client-protocol.h" @@ -27,12 +28,11 @@ static struct xdg_wm_base *wm_base = NULL; static struct zwp_idle_inhibit_manager_v1 *idle_inhibit_manager = NULL; static struct zwp_idle_inhibitor_v1 *idle_inhibitor = NULL; -struct wlr_egl *egl; struct wl_egl_window *egl_window; struct wlr_egl_surface *egl_surface; static void draw(void) { - eglMakeCurrent(egl->display, egl_surface, egl_surface, egl->context); + eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context); float color[] = {1.0, 1.0, 0.0, 1.0}; if (idle_inhibitor) { @@ -43,7 +43,7 @@ static void draw(void) { glClearColor(color[0], color[1], color[2], 1.0); glClear(GL_COLOR_BUFFER_BIT); - eglSwapBuffers(egl->display, egl_surface); + eglSwapBuffers(egl_display, egl_surface); } static void pointer_handle_button(void *data, struct wl_pointer *pointer, uint32_t serial, @@ -192,8 +192,7 @@ int main(int argc, char **argv) { return EXIT_FAILURE; } - EGLint attribs[] = { EGL_NONE }; - egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs); + egl_init(display); struct wl_surface *surface = wl_compositor_create_surface(compositor); struct xdg_surface *xdg_surface = @@ -214,7 +213,8 @@ int main(int argc, char **argv) { wl_surface_commit(surface); egl_window = wl_egl_window_create(surface, width, height); - egl_surface = wlr_egl_create_surface(egl, egl_window); + egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, egl_window, NULL); wl_display_roundtrip(display); diff --git a/examples/input-inhibitor.c b/examples/input-inhibitor.c index a0acebd0..68233227 100644 --- a/examples/input-inhibitor.c +++ b/examples/input-inhibitor.c @@ -6,6 +6,7 @@ #include #include #include +#include "egl_common.h" #include "wlr-input-inhibitor-unstable-v1-client-protocol.h" #include "xdg-shell-client-protocol.h" @@ -18,12 +19,11 @@ static struct xdg_wm_base *wm_base = NULL; static struct zwlr_input_inhibit_manager_v1 *input_inhibit_manager = NULL; static struct zwlr_input_inhibitor_v1 *input_inhibitor = NULL; -struct wlr_egl *egl; struct wl_egl_window *egl_window; struct wlr_egl_surface *egl_surface; static void render_frame(void) { - eglMakeCurrent(egl->display, egl_surface, egl_surface, egl->context); + eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context); glViewport(0, 0, width, height); if (keys) { @@ -33,7 +33,7 @@ static void render_frame(void) { } glClear(GL_COLOR_BUFFER_BIT); - eglSwapBuffers(egl->display, egl_surface); + eglSwapBuffers(egl_display, egl_surface); } static void xdg_surface_handle_configure(void *data, @@ -157,8 +157,7 @@ int main(int argc, char **argv) { input_inhibit_manager); assert(input_inhibitor); - EGLint attribs[] = { EGL_NONE }; - egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs); + egl_init(display); struct wl_surface *surface = wl_compositor_create_surface(compositor); assert(surface); @@ -174,7 +173,8 @@ int main(int argc, char **argv) { wl_surface_commit(surface); egl_window = wl_egl_window_create(surface, width, height); - egl_surface = wlr_egl_create_surface(egl, egl_window); + egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, egl_window, NULL); wl_display_roundtrip(display); diff --git a/examples/keyboard-shortcuts-inhibit.c b/examples/keyboard-shortcuts-inhibit.c index 58684683..da40838d 100644 --- a/examples/keyboard-shortcuts-inhibit.c +++ b/examples/keyboard-shortcuts-inhibit.c @@ -5,6 +5,7 @@ #include #include #include +#include "egl_common.h" #include "keyboard-shortcuts-inhibit-unstable-v1-client-protocol.h" #include "xdg-shell-client-protocol.h" @@ -33,12 +34,11 @@ static struct zwp_keyboard_shortcuts_inhibitor_v1 * keyboard_shortcuts_inhibitor = NULL; static bool active = false; -struct wlr_egl *egl; struct wl_egl_window *egl_window; struct wlr_egl_surface *egl_surface; static void draw(void) { - eglMakeCurrent(egl->display, egl_surface, egl_surface, egl->context); + eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context); float color[] = {1.0, 1.0, 0.0, 1.0}; if (keyboard_shortcuts_inhibitor) { @@ -49,7 +49,7 @@ static void draw(void) { glClearColor(color[0], color[1], color[2], 1.0); glClear(GL_COLOR_BUFFER_BIT); - eglSwapBuffers(egl->display, egl_surface); + eglSwapBuffers(egl_display, egl_surface); } static void keyboard_shortcuts_inhibit_handle_active(void *data, @@ -224,8 +224,7 @@ int main(int argc, char **argv) { return EXIT_FAILURE; } - EGLint attribs[] = { EGL_NONE }; - egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs); + egl_init(display); struct wl_surface *surface = wl_compositor_create_surface(compositor); struct xdg_surface *xdg_surface = @@ -241,7 +240,8 @@ int main(int argc, char **argv) { wl_surface_commit(surface); egl_window = wl_egl_window_create(surface, width, height); - egl_surface = wlr_egl_create_surface(egl, egl_window); + egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, egl_window, NULL); wl_display_roundtrip(display); diff --git a/examples/layer-shell.c b/examples/layer-shell.c index f4cdaf3b..19f76a68 100644 --- a/examples/layer-shell.c +++ b/examples/layer-shell.c @@ -13,6 +13,7 @@ #include #include #include +#include "egl_common.h" #include "wlr-layer-shell-unstable-v1-client-protocol.h" #include "xdg-shell-client-protocol.h" @@ -29,7 +30,6 @@ struct zwlr_layer_surface_v1 *layer_surface; static struct wl_output *wl_output; struct wl_surface *wl_surface; -struct wlr_egl *egl; struct wl_egl_window *egl_window; struct wlr_egl_surface *egl_surface; struct wl_callback *frame_callback; @@ -94,7 +94,7 @@ static struct wl_callback_listener popup_frame_listener = { }; static void draw(void) { - eglMakeCurrent(egl->display, egl_surface, egl_surface, egl->context); + eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context); struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); @@ -143,7 +143,7 @@ static void draw(void) { frame_callback = wl_surface_frame(wl_surface); wl_callback_add_listener(frame_callback, &frame_listener, NULL); - eglSwapBuffers(egl->display, egl_surface); + eglSwapBuffers(egl_display, egl_surface); demo.last_frame = ts; } @@ -151,7 +151,7 @@ static void draw(void) { static void draw_popup(void) { static float alpha_mod = -0.01; - eglMakeCurrent(egl->display, popup_egl_surface, popup_egl_surface, egl->context); + eglMakeCurrent(egl_display, popup_egl_surface, popup_egl_surface, egl_context); glViewport(0, 0, popup_width, popup_height); glClearColor(popup_red, 0.5f, 0.5f, popup_alpha); popup_alpha += alpha_mod; @@ -163,7 +163,7 @@ static void draw_popup(void) { popup_frame_callback = wl_surface_frame(popup_wl_surface); assert(popup_frame_callback); wl_callback_add_listener(popup_frame_callback, &popup_frame_listener, NULL); - eglSwapBuffers(egl->display, popup_egl_surface); + eglSwapBuffers(egl_display, popup_egl_surface); wl_surface_commit(popup_wl_surface); } @@ -188,7 +188,7 @@ static void xdg_popup_configure(void *data, struct xdg_popup *xdg_popup, } static void popup_destroy(void) { - wlr_egl_destroy_surface(egl, popup_egl_surface); + eglDestroySurface(egl_display, popup_egl_surface); wl_egl_window_destroy(popup_egl_window); xdg_popup_destroy(popup); wl_surface_destroy(popup_wl_surface); @@ -242,8 +242,9 @@ static void create_popup(uint32_t serial) { popup_wl_surface = surface; popup_egl_window = wl_egl_window_create(surface, popup_width, popup_height); assert(popup_egl_window); - popup_egl_surface = wlr_egl_create_surface(egl, popup_egl_window); - assert(popup_egl_surface); + popup_egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, popup_egl_window, NULL); + assert(popup_egl_surface != EGL_NO_SURFACE); draw_popup(); } @@ -260,7 +261,7 @@ static void layer_surface_configure(void *data, static void layer_surface_closed(void *data, struct zwlr_layer_surface_v1 *surface) { - wlr_egl_destroy_surface(egl, egl_surface); + eglDestroySurface(egl_display, egl_surface); wl_egl_window_destroy(egl_window); zwlr_layer_surface_v1_destroy(surface); wl_surface_destroy(wl_surface); @@ -631,8 +632,7 @@ int main(int argc, char **argv) { cursor_surface = wl_compositor_create_surface(compositor); assert(cursor_surface); - EGLint attribs[] = { EGL_ALPHA_SIZE, 8, EGL_NONE }; - egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs); + egl_init(display); wl_surface = wl_compositor_create_surface(compositor); assert(wl_surface); @@ -654,8 +654,9 @@ int main(int argc, char **argv) { egl_window = wl_egl_window_create(wl_surface, width, height); assert(egl_window); - egl_surface = wlr_egl_create_surface(egl, egl_window); - assert(egl_surface); + egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, egl_window, NULL); + assert(egl_surface != EGL_NO_SURFACE); wl_display_roundtrip(display); draw(); diff --git a/examples/meson.build b/examples/meson.build index ede85832..0300e035 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -54,7 +54,7 @@ clients = { 'proto': ['kde-idle'], }, 'idle-inhibit': { - 'src': 'idle-inhibit.c', + 'src': ['idle-inhibit.c', 'egl_common.c'], 'dep': [wayland_egl, wlroots], 'proto': [ 'idle-inhibit-unstable-v1', @@ -62,7 +62,7 @@ clients = { ], }, 'keyboard-shortcuts-inhibit': { - 'src': 'keyboard-shortcuts-inhibit.c', + 'src': ['keyboard-shortcuts-inhibit.c', 'egl_common.c'], 'dep': [wayland_egl, wayland_cursor, wlroots], 'proto': [ 'keyboard-shortcuts-inhibit-unstable-v1', @@ -70,7 +70,7 @@ clients = { ], }, 'layer-shell': { - 'src': 'layer-shell.c', + 'src': ['layer-shell.c', 'egl_common.c'], 'dep': [wayland_egl, wayland_cursor, wlroots], 'proto': [ 'wlr-layer-shell-unstable-v1', @@ -78,7 +78,7 @@ clients = { ], }, 'input-inhibitor': { - 'src': 'input-inhibitor.c', + 'src': ['input-inhibitor.c', 'egl_common.c'], 'dep': [wayland_egl, wayland_cursor, wlroots], 'proto': [ 'wlr-input-inhibitor-unstable-v1', @@ -96,7 +96,7 @@ clients = { 'proto': ['wlr-output-power-management-unstable-v1'], }, 'pointer-constraints': { - 'src': 'pointer-constraints.c', + 'src': ['pointer-constraints.c', 'egl_common.c'], 'dep': [wayland_egl, wlroots], 'proto': [ 'pointer-constraints-unstable-v1', @@ -104,7 +104,7 @@ clients = { ], }, 'relative-pointer': { - 'src': 'relative-pointer-unstable-v1.c', + 'src': ['relative-pointer-unstable-v1.c', 'egl_common.c'], 'dep': [wayland_egl, wlroots], 'proto': [ 'pointer-constraints-unstable-v1', @@ -137,7 +137,7 @@ clients = { ], }, 'toplevel-decoration': { - 'src': 'toplevel-decoration.c', + 'src': ['toplevel-decoration.c', 'egl_common.c'], 'dep': [wayland_egl, wlroots], 'proto': [ 'xdg-decoration-unstable-v1', @@ -154,7 +154,7 @@ clients = { ], }, 'text-input': { - 'src': 'text-input.c', + 'src': ['text-input.c', 'egl_common.c'], 'dep': [wayland_egl, wayland_cursor, wlroots], 'proto': [ 'text-input-unstable-v3', diff --git a/examples/pointer-constraints.c b/examples/pointer-constraints.c index ddd91bf1..f80bb53f 100644 --- a/examples/pointer-constraints.c +++ b/examples/pointer-constraints.c @@ -6,6 +6,7 @@ #include #include #include +#include "egl_common.h" #include "xdg-shell-client-protocol.h" #include "pointer-constraints-unstable-v1-client-protocol.h" @@ -16,7 +17,6 @@ static struct wl_seat *seat = NULL; static struct xdg_wm_base *wm_base = NULL; static struct zwp_pointer_constraints_v1 *pointer_constraints = NULL; -struct wlr_egl *egl; struct wl_egl_window *egl_window; struct wlr_egl_surface *egl_surface; struct zwp_locked_pointer_v1* locked_pointer; @@ -32,7 +32,7 @@ enum { struct wl_region *regions[3]; static void draw(void) { - eglMakeCurrent(egl->display, egl_surface, egl_surface, egl->context); + eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context); float color[] = {1.0, 1.0, 0.0, 1.0}; @@ -40,7 +40,7 @@ static void draw(void) { glClearColor(color[0], color[1], color[2], 1.0); glClear(GL_COLOR_BUFFER_BIT); - eglSwapBuffers(egl->display, egl_surface); + eglSwapBuffers(egl_display, egl_surface); } static void pointer_handle_button(void *data, struct wl_pointer *pointer, @@ -211,8 +211,7 @@ int main(int argc, char **argv) { wl_region_add(joint_region, 256, 256, 256, 256); regions[REGION_TYPE_JOINT] = joint_region; - EGLint attribs[] = { EGL_NONE }; - egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs); + egl_init(display); struct wl_surface *surface = wl_compositor_create_surface(compositor); struct xdg_surface *xdg_surface = @@ -241,7 +240,8 @@ int main(int argc, char **argv) { wl_surface_commit(surface); egl_window = wl_egl_window_create(surface, width, height); - egl_surface = wlr_egl_create_surface(egl, egl_window); + egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, egl_window, NULL); wl_display_roundtrip(display); diff --git a/examples/relative-pointer-unstable-v1.c b/examples/relative-pointer-unstable-v1.c index f6b6c923..2d49d3d2 100644 --- a/examples/relative-pointer-unstable-v1.c +++ b/examples/relative-pointer-unstable-v1.c @@ -5,6 +5,7 @@ #include #include #include +#include "egl_common.h" #include "pointer-constraints-unstable-v1-client-protocol.h" #include "relative-pointer-unstable-v1-client-protocol.h" #include "xdg-shell-client-protocol.h" @@ -17,7 +18,6 @@ */ struct egl_info { - struct wlr_egl *egl; struct wl_egl_window *egl_window; struct wlr_egl_surface *egl_surface; uint32_t width; @@ -58,8 +58,8 @@ static struct wl_callback_listener surface_callback_listener = { }; static void draw_init(struct egl_info *e) { - eglMakeCurrent(e->egl->display, e->egl_surface, - e->egl_surface, e->egl->context); + eglMakeCurrent(egl_display, e->egl_surface, + e->egl_surface, egl_context); glViewport(0, 0, e->width, e->height); } @@ -88,7 +88,7 @@ static void draw_end(struct egl_info *e) { e->frame_callback = wl_surface_frame(e->surface); wl_callback_add_listener(e->frame_callback, &surface_callback_listener, e); - eglSwapBuffers(e->egl->display, e->egl_surface); + eglSwapBuffers(egl_display, e->egl_surface); } @@ -170,8 +170,7 @@ static void xdg_toplevel_handle_configure(void *data, static void xdg_toplevel_handle_close(void *data, struct xdg_toplevel *xdg_toplevel) { - struct egl_info *e = data; - wlr_egl_destroy(e->egl); + egl_finish(); exit(EXIT_SUCCESS); } @@ -442,8 +441,7 @@ int main(int argc, char **argv) { struct egl_info *e = calloc(1, sizeof(struct egl_info)); e->width = e->height = 512; - EGLint attribs[] = { EGL_NONE }; - e->egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs); + egl_init(display); /* Create the surface and xdg_toplevels, and set listeners */ @@ -460,7 +458,8 @@ int main(int argc, char **argv) { wl_surface_commit(surface); e->egl_window = wl_egl_window_create(surface, e->width, e->height); - e->egl_surface = wlr_egl_create_surface(e->egl, e->egl_window); + e->egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, e->egl_window, NULL); e->surface = surface; wl_display_roundtrip(display); diff --git a/examples/text-input.c b/examples/text-input.c index b8d75fee..3ffeac7d 100644 --- a/examples/text-input.c +++ b/examples/text-input.c @@ -7,6 +7,7 @@ #include #include #include +#include "egl_common.h" #include "text-input-unstable-v3-client-protocol.h" #include "xdg-shell-client-protocol.h" @@ -63,12 +64,11 @@ static struct xdg_wm_base *wm_base = NULL; static struct zwp_text_input_manager_v3 *text_input_manager = NULL; static struct zwp_text_input_v3 *text_input = NULL; -struct wlr_egl *egl; struct wl_egl_window *egl_window; struct wlr_egl_surface *egl_surface; static void draw(void) { - eglMakeCurrent(egl->display, egl_surface, egl_surface, egl->context); + eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context); float color[] = {1.0, 1.0, 0.0, 1.0}; color[0] = enabled * 1.0; @@ -78,7 +78,7 @@ static void draw(void) { glClearColor(color[0], color[1], color[2], 1.0); glClear(GL_COLOR_BUFFER_BIT); - eglSwapBuffers(egl->display, egl_surface); + eglSwapBuffers(egl_display, egl_surface); } static size_t utf8_strlen(char *str) { @@ -363,8 +363,7 @@ int main(int argc, char **argv) { zwp_text_input_v3_add_listener(text_input, &text_input_listener, NULL); - EGLint attribs[] = { EGL_NONE }; - egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs); + egl_init(display); struct wl_surface *surface = wl_compositor_create_surface(compositor); struct xdg_surface *xdg_surface = @@ -377,7 +376,8 @@ int main(int argc, char **argv) { wl_surface_commit(surface); egl_window = wl_egl_window_create(surface, width, height); - egl_surface = wlr_egl_create_surface(egl, egl_window); + egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, egl_window, NULL); wl_display_roundtrip(display); diff --git a/examples/toplevel-decoration.c b/examples/toplevel-decoration.c index 0369116a..bdcdf845 100644 --- a/examples/toplevel-decoration.c +++ b/examples/toplevel-decoration.c @@ -5,6 +5,7 @@ #include #include #include +#include "egl_common.h" #include "xdg-shell-client-protocol.h" #include "xdg-decoration-unstable-v1-client-protocol.h" @@ -20,7 +21,6 @@ static struct wl_compositor *compositor = NULL; static struct xdg_wm_base *wm_base = NULL; static struct zxdg_decoration_manager_v1 *decoration_manager = NULL; -struct wlr_egl *egl; struct wl_egl_window *egl_window; struct wlr_egl_surface *egl_surface; @@ -53,7 +53,7 @@ static void request_preferred_mode(void) { } static void draw(void) { - eglMakeCurrent(egl->display, egl_surface, egl_surface, egl->context); + eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context); float color[] = {1.0, 1.0, 0.0, 1.0}; if (current_mode == ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE) { @@ -64,7 +64,7 @@ static void draw(void) { glClearColor(color[0], color[1], color[2], 1.0); glClear(GL_COLOR_BUFFER_BIT); - eglSwapBuffers(egl->display, egl_surface); + eglSwapBuffers(egl_display, egl_surface); } static void xdg_surface_handle_configure(void *data, @@ -218,8 +218,7 @@ int main(int argc, char **argv) { return EXIT_FAILURE; } - EGLint attribs[] = { EGL_NONE }; - egl = wlr_egl_create(EGL_PLATFORM_WAYLAND_EXT, display, attribs); + egl_init(display); struct wl_surface *surface = wl_compositor_create_surface(compositor); struct xdg_surface *xdg_surface = @@ -238,7 +237,8 @@ int main(int argc, char **argv) { wl_surface_commit(surface); egl_window = wl_egl_window_create(surface, width, height); - egl_surface = wlr_egl_create_surface(egl, egl_window); + egl_surface = eglCreatePlatformWindowSurfaceEXT( + egl_display, egl_config, egl_window, NULL); wl_display_roundtrip(display);