[PATCH weston 12/12] compositor: allow override of wl_surface.commit
Pekka Paalanen
ppaalanen at gmail.com
Wed Oct 10 02:49:34 PDT 2012
Rename surface_commit() into weston_surface_commit(), and call it via a
function pointer in struct weston_surface. This will allow special
surfaces to avoid being committed; a sub-surface rendered into with GL,
for instance (eglSwapbuffers always does a commit).
Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
---
src/compositor.c | 15 +++++++++++----
src/compositor.h | 17 ++++++++++++++---
2 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/src/compositor.c b/src/compositor.c
index 51ad616..1bf800c 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -268,6 +268,7 @@ weston_surface_create(struct weston_compositor *compositor)
region_init_infinite(&surface->pending.input);
wl_list_init(&surface->pending.frame_callback_list);
wl_signal_init(&surface->commit_signal);
+ surface->commit = weston_surface_commit;
return surface;
}
@@ -1228,11 +1229,9 @@ surface_set_input_region(struct wl_client *client,
}
}
-static void
-surface_commit(struct wl_client *client, struct wl_resource *resource)
+void
+weston_surface_commit(struct weston_surface *surface)
{
- struct weston_surface *surface = resource->data;
-
/* wl_surface.attach */
if (surface->pending.buffer || surface->pending.remove_contents)
weston_surface_attach(surface, surface->pending.buffer);
@@ -1273,6 +1272,14 @@ surface_commit(struct wl_client *client, struct wl_resource *resource)
weston_surface_schedule_repaint(surface);
}
+static void
+surface_commit(struct wl_client *client, struct wl_resource *resource)
+{
+ struct weston_surface *surface = resource->data;
+
+ surface->commit(surface);
+}
+
static const struct wl_surface_interface surface_interface = {
surface_destroy,
surface_attach,
diff --git a/src/compositor.h b/src/compositor.h
index c17c398..88b22a1 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -490,9 +490,17 @@ struct weston_surface {
struct wl_signal commit_signal;
/*
- * If non-NULL, this function will be called on surface::attach after
- * a new buffer has been set up for this surface. The integer params
- * are the sx and sy paramerters supplied to surface::attach .
+ * This function is always called on wl_surface.commit request,
+ * and is usually weston_surface_commit(). Sub-surfaces, that want
+ * to avoid commits on themselves, this would be something else.
+ */
+ void (*commit)(struct weston_surface *surface);
+
+ /*
+ * If non-NULL, this function will be called on weston_surface_commit()
+ * after a new buffer has been set up for this surface. The integer
+ * params are the sx and sy parameters supplied to wl_surface.attach
+ * request.
*/
void (*configure)(struct weston_surface *es, int32_t sx, int32_t sy);
void *private;
@@ -686,6 +694,9 @@ void
weston_surface_unmap(struct weston_surface *surface);
void
+weston_surface_commit(struct weston_surface *surface);
+
+void
weston_buffer_post_release(struct wl_buffer *buffer);
uint32_t
--
1.7.8.6
More information about the wayland-devel
mailing list