compositor: Use eglBindWaylandDisplayWL
diff --git a/compositor/compositor.c b/compositor/compositor.c
index afff961..2fcbb70 100644
--- a/compositor/compositor.c
+++ b/compositor/compositor.c
@@ -282,6 +282,27 @@
 	return (uint32_t *) argb_pixels;
 }
 
+static void
+wlsc_buffer_attach(struct wl_buffer *buffer, struct wl_surface *surface)
+{
+	struct wlsc_surface *es = (struct wlsc_surface *) surface;
+	struct wlsc_compositor *ec = es->compositor;
+	EGLImageKHR *image;
+
+	if (buffer->attach) {
+		buffer->attach(buffer, surface);
+	} else {
+		image = eglCreateImageKHR(ec->display, ec->context,
+					  EGL_WAYLAND_BUFFER_WL,
+					  buffer, NULL);
+
+		glBindTexture(GL_TEXTURE_2D, es->texture);
+		glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);
+		es->visual = buffer->visual;
+		eglDestroyImageKHR(ec->display, image);
+	}
+}
+
 static struct wl_buffer *
 create_buffer_from_png(struct wlsc_compositor *ec,
 		       const char *filename, int width, int height)
@@ -354,7 +375,8 @@
 		free(background);
 		return NULL;
 	}
-	buffer->attach(buffer, &background->surface);
+
+	wlsc_buffer_attach(buffer, &background->surface);
 
 	return background;
 }
@@ -569,7 +591,8 @@
 	 * damaged by the client. */
 	wlsc_surface_damage(es);
 
-	buffer->attach(buffer, surface);
+	wlsc_buffer_attach(buffer, surface);
+
 	es->buffer = buffer;
 	es->x += x;
 	es->y += y;
@@ -694,7 +717,7 @@
 {
 	wlsc_surface_damage(device->sprite);
 
-	buffer->attach(buffer, &device->sprite->surface);
+	wlsc_buffer_attach(buffer, &device->sprite->surface);
 	device->hotspot_x = x;
 	device->hotspot_y = y;
 
@@ -1306,6 +1329,7 @@
 	wl_compositor_init(&ec->compositor, &compositor_interface, display);
 
 	wlsc_shm_init(ec);
+	eglBindWaylandDisplayWL(ec->display, ec->wl_display);
 
 	wlsc_shell_init(ec);
 
@@ -1403,6 +1427,7 @@
 
 	wl_display_run(display);
 
+	eglUnbindWaylandDisplayWL(ec->display, display);
 	wl_display_destroy(display);
 
 	ec->destroy(ec);