diff options
author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-11-03 18:05:54 +0100 |
---|---|---|
committer | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-11-03 18:05:54 +0100 |
commit | 551cf6053728c9cf691c443c409d3fbd936db0eb (patch) | |
tree | 95b36e78f3971ce1fea779920c3811210a95ecae | |
parent | aedde6a37e915d9e712ca8e85f8870870ab3fb63 (diff) |
egl-wayland-window.c: Update to wayland updates
-rw-r--r-- | egl-wayland-window.c | 71 |
1 files changed, 18 insertions, 53 deletions
diff --git a/egl-wayland-window.c b/egl-wayland-window.c index 058e3c6..7897c86 100644 --- a/egl-wayland-window.c +++ b/egl-wayland-window.c @@ -12,7 +12,6 @@ struct display { struct wl_display *display; - struct wl_visual *premultiplied_argb_visual; struct { struct wl_compositor *compositor; struct wl_shell *shell; @@ -70,35 +69,11 @@ init_egl(struct display *display) } static void -sync_callback(void *data) -{ - int *done = data; - - *done = 1; -} - -static void create_egl_window(struct display *display, struct window *window) { - struct wl_visual *visual; - int done = 0; - - if (!display->premultiplied_argb_visual) { - wl_display_sync_callback(display->display, sync_callback, &done); - while (!done) - wl_display_iterate(display->display, display->mask); - if (!display->premultiplied_argb_visual) { - fprintf(stderr, "premultiplied argb visual missing\n"); - exit(1); - } - } - - visual = display->premultiplied_argb_visual; - window->egl_window = wl_egl_window_create( - window->surface, + window->egl_window = wl_egl_window_create(window->surface, window->width, - window->height, - visual); + window->height); window->egl.surf = eglCreateWindowSurface(display->egl.dpy, display->egl.conf, @@ -126,8 +101,10 @@ init_gl(struct window *window) glTranslatef(0.0, 0.0, -10.0); } +static const struct wl_callback_listener frame_listener; + static void -redraw(struct wl_surface *surface, void *data, uint32_t time) +redraw(void *data, struct wl_callback *callback, uint32_t time) { struct window *window = data; static const GLfloat verts[3][2] = { @@ -164,12 +141,21 @@ redraw(struct wl_surface *surface, void *data, uint32_t time) glPopMatrix(); + if (callback) + wl_callback_destroy(callback); + + callback = wl_surface_frame(window->surface); + wl_callback_add_listener(callback, &frame_listener, window); + eglSwapBuffers(window->display->egl.dpy, window->egl.surf); wl_shell_set_toplevel(window->display->interface.shell, window->surface); - wl_display_frame_callback(window->display->display, window->surface, redraw, window); } +static const struct wl_callback_listener frame_listener = { + redraw +}; + enum window_location { WINDOW_INTERIOR = 0, WINDOW_RESIZING_TOP = 1, @@ -218,36 +204,15 @@ static const struct wl_shell_listener wayland_shell_listener = { }; static void -compositor_handle_visual(void *data, - struct wl_compositor *compositor, - uint32_t id, uint32_t token) -{ - struct display *d = data; - - switch (token) { - case WL_COMPOSITOR_VISUAL_PREMULTIPLIED_ARGB32: - d->premultiplied_argb_visual = - wl_visual_create(d->display, id, 1); - break; - } -} - -static const struct wl_compositor_listener compositor_listener = { - compositor_handle_visual, -}; - -static void display_handle_global(struct wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data) { struct display *d = data; if (strcmp(interface, "wl_compositor") == 0) { - d->interface.compositor = wl_compositor_create(display, id, 1); - wl_compositor_add_listener(d->interface.compositor, - &compositor_listener, d); + d->interface.compositor = wl_display_bind(display, id, &wl_compositor_interface); } else if (strcmp(interface, "wl_shell") == 0) { - d->interface.shell = wl_shell_create(display, id, 1); + d->interface.shell = wl_display_bind(display, id, &wl_shell_interface); wl_shell_add_listener(d->interface.shell, &wayland_shell_listener, d); } } @@ -292,7 +257,7 @@ main(int argc, char **argv) wl_shell_set_toplevel(display.interface.shell, window.surface); - redraw(window.surface, &window, 0); + redraw(&window, NULL, 0); while (true) wl_display_iterate(display.display, display.mask); |