[PATCH weston 1/2] simple-touch: Use damage_buffer if available

Derek Foreman derekf at osg.samsung.com
Fri Jan 8 13:00:55 PST 2016


Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---
 clients/simple-touch.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/clients/simple-touch.c b/clients/simple-touch.c
index 446f2ca..383d802 100644
--- a/clients/simple-touch.c
+++ b/clients/simple-touch.c
@@ -56,6 +56,7 @@ struct touch {
 	int has_argb;
 	int width, height;
 	void *data;
+	bool use_damage_buffer;
 };
 
 static void
@@ -148,7 +149,10 @@ touch_paint(struct touch *touch, int32_t x, int32_t y, int32_t id)
 	p[2] = c;
 
 	wl_surface_attach(touch->surface, touch->buffer, 0, 0);
-	wl_surface_damage(touch->surface, x - 2, y - 2, 5, 5);
+	if (touch->use_damage_buffer)
+		wl_surface_damage_buffer(touch->surface, x - 2, y - 2, 5, 5);
+	else
+		wl_surface_damage(touch->surface, x - 2, y - 2, 5, 5);
 	/* todo: We could queue up more damage before committing, if there
 	 * are more input events to handle.
 	 */
@@ -269,9 +273,13 @@ handle_global(void *data, struct wl_registry *registry,
 	struct touch *touch = data;
 
 	if (strcmp(interface, "wl_compositor") == 0) {
+		int cv = MIN(WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION, version);
+
 		touch->compositor =
 			wl_registry_bind(registry, name,
-					 &wl_compositor_interface, 1);
+					 &wl_compositor_interface, cv);
+		if (cv >= WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION)
+			touch->use_damage_buffer = true;
 	} else if (strcmp(interface, "wl_shell") == 0) {
 		touch->shell =
 			wl_registry_bind(registry, name,
@@ -308,6 +316,7 @@ touch_create(int width, int height)
 	touch->display = wl_display_connect(NULL);
 	assert(touch->display);
 
+	touch->use_damage_buffer = false;
 	touch->has_argb = 0;
 	touch->registry = wl_display_get_registry(touch->display);
 	wl_registry_add_listener(touch->registry, &registry_listener, touch);
@@ -337,7 +346,10 @@ touch_create(int width, int height)
 
 	memset(touch->data, 64, width * height * 4);
 	wl_surface_attach(touch->surface, touch->buffer, 0, 0);
-	wl_surface_damage(touch->surface, 0, 0, width, height);
+	if (touch->use_damage_buffer)
+		wl_surface_damage_buffer(touch->surface, 0, 0, width, height);
+	else
+		wl_surface_damage(touch->surface, 0, 0, width, height);
 	wl_surface_commit(touch->surface);
 
 	return touch;
-- 
2.6.4



More information about the wayland-devel mailing list