diff options
Diffstat (limited to 'examples/embedded.c')
-rw-r--r-- | examples/embedded.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/examples/embedded.c b/examples/embedded.c index 1bf11643..1e52e892 100644 --- a/examples/embedded.c +++ b/examples/embedded.c @@ -1,4 +1,6 @@ #define _POSIX_C_SOURCE 200112L +#include <EGL/egl.h> +#include <EGL/eglext.h> #include <GLES2/gl2.h> #include <stdio.h> #include <stdlib.h> @@ -13,7 +15,6 @@ #include <wlr/types/wlr_xdg_shell.h> #include <wlr/util/log.h> -#include "egl_common.h" #include "xdg-shell-client-protocol.h" static struct wl_display *remote_display = NULL; @@ -31,8 +32,12 @@ static struct wlr_scene_output *scene_output = NULL; static struct wl_listener new_surface = {0}; static struct wl_listener output_frame = {0}; -int width = 500; -int height = 500; +static EGLDisplay egl_display; +static EGLConfig egl_config; +static EGLContext egl_context; + +static int width = 500; +static int height = 500; static void draw_main_surface(void); @@ -120,6 +125,29 @@ static void handle_new_surface(struct wl_listener *listener, void *data) { wlr_scene_surface_create(&scene->tree, wlr_surface); } +static void init_egl(struct wl_display *display) { + egl_display = eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR, display, NULL); + eglInitialize(egl_display, NULL, NULL); + + EGLint matched = 0; + const EGLint config_attribs[] = { + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_RED_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_BLUE_SIZE, 8, + EGL_ALPHA_SIZE, 8, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_NONE, + }; + eglChooseConfig(egl_display, config_attribs, &egl_config, 1, &matched); + + const EGLint context_attribs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_NONE, + }; + egl_context = eglCreateContext(egl_display, egl_config, EGL_NO_CONTEXT, context_attribs); +} + int main(int argc, char *argv[]) { wlr_log_init(WLR_DEBUG, NULL); @@ -128,7 +156,7 @@ int main(int argc, char *argv[]) { wl_registry_add_listener(registry, ®istry_listener, NULL); wl_display_roundtrip(remote_display); - egl_init(remote_display); + init_egl(remote_display); struct wl_display *local_display = wl_display_create(); struct wlr_backend *backend = wlr_wl_backend_create(local_display, remote_display); @@ -152,7 +180,7 @@ int main(int argc, char *argv[]) { xdg_toplevel_add_listener(xdg_toplevel, &xdg_toplevel_listener, NULL); egl_window = wl_egl_window_create(main_surface, width, height); - egl_surface = eglCreatePlatformWindowSurfaceEXT(egl_display, + egl_surface = eglCreatePlatformWindowSurface(egl_display, egl_config, egl_window, NULL); struct wl_surface *child_surface = wl_compositor_create_surface(compositor); |