diff --git a/clients/simple-egl.c b/clients/simple-egl.c index 26ebe5c..0eca0f7 100644 --- a/clients/simple-egl.c +++ b/clients/simple-egl.c @@ -37,6 +37,8 @@ #include #include +#include + struct window; struct seat; @@ -101,8 +103,17 @@ static const char *frag_shader_text = static int running = 1; static void -init_egl(struct display *display, int opaque) +create_surface(struct window *window); + +static void +init_gl(struct window *window); + +static void* +init_egl(void *data) { + struct display *display = data; + struct window *window = display->window; + int opaque = window->opaque; static const EGLint context_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE @@ -140,7 +151,10 @@ init_egl(struct display *display, int opaque) display->egl.conf, EGL_NO_CONTEXT, context_attribs); assert(display->egl.ctx); + create_surface(window); + init_gl(window); + return NULL; } static void @@ -619,6 +633,7 @@ usage(int error_code) int main(int argc, char **argv) { + pthread_t thread; struct sigaction sigint; struct display display = { 0 }; struct window window = { 0 }; @@ -649,9 +664,7 @@ main(int argc, char **argv) wl_display_dispatch(display.display); - init_egl(&display, window.opaque); - create_surface(&window); - init_gl(&window); + pthread_create(&thread, NULL, init_egl, (void *) &display); display.cursor_surface = wl_compositor_create_surface(display.compositor);