6 #define WL_HIDE_DEPRECATED
7 #include <wayland-client.h>
8 #include <wayland-tbm-client.h>
9 #include <wayland-tbm-int.h>
11 #include <tbm_surface.h>
13 #include "wayland-tbm-test-client-protocol.h"
15 #define WL_APP_C_LOG(fmt, ...) fprintf(stderr, "[CLIENT(%d):%s] " fmt, getpid(), __func__, ##__VA_ARGS__)
18 struct wayland_tbm_client *tbm_client;
19 struct wl_tbm *wl_tbm;
20 struct wl_tbm_test *wl_tbm_test;
21 struct wl_test_surface *surface;
23 struct wl_buffer *bufs[3];
32 _wl_registry_global_cb(void *data,
33 struct wl_registry *wl_registry,
35 const char *interface,
38 AppInfoClient *app = (AppInfoClient *)data;
40 if (!strcmp(interface, "wl_tbm_test")) {
41 WL_APP_C_LOG("bind %s", interface);
42 app->wl_tbm_test = wl_registry_bind(wl_registry, name,
43 &wl_tbm_test_interface, 1);
48 _wl_registry_global_remove_cb(void *data,
49 struct wl_registry *wl_registry,
54 static const struct wl_registry_listener wl_registry_impl = {
55 _wl_registry_global_cb,
56 _wl_registry_global_remove_cb,
59 void create_provider(AppInfoClient *app)
61 tbm_surface_h tbm_surf;
64 app->surface = wl_tbm_test_create_surface(app->wl_tbm_test);
65 wl_tbm_test_set_provider(app->wl_tbm_test, app->surface, "test");
68 for (i = 0; i < 3; i++) {
69 tbm_surf = tbm_surface_create(16, 16, TBM_FORMAT_ABGR8888);
70 app->bufs[i] = wayland_tbm_client_create_buffer(app->tbm_client, tbm_surf);
74 void _wl_callback_done_cb(void *data,
75 struct wl_callback *wl_callback,
76 uint32_t callback_data)
78 AppInfoClient *app = (AppInfoClient *)data;
80 wl_test_surface_attach(app->surface, app->bufs[app->cur_buf]);
81 app->cur_buf = (app->cur_buf + 1) % 3;
83 wl_callback_destroy(wl_callback);
86 static struct wl_callback_listener do_done_impl = {
91 main(int argc, char *argv[])
93 struct wl_display *dpy = NULL;
94 struct wl_registry *registry;
95 const char *dpy_name = NULL;
96 static const char *default_dpy_name = "tbm_remote";
99 struct wl_callback *wl_cb;
104 dpy_name = default_dpy_name;
106 dpy = wl_display_connect(dpy_name);
108 printf("[APP] failed to connect server\n");
112 registry = wl_display_get_registry(dpy);
113 wl_registry_add_listener(registry, &wl_registry_impl, &gApp);
114 wl_display_roundtrip(dpy);
115 if (gApp.wl_tbm_test == NULL) {
116 WL_APP_C_LOG("fail to bind::wl_tbm_test");
120 gApp.tbm_client = wayland_tbm_client_init(dpy);
121 if (!gApp.tbm_client) {
122 WL_APP_C_LOG("fail to wayland_tbm_client_init()\n");
125 gApp.wl_tbm = wayland_tbm_client_get_wl_tbm(gApp.tbm_client);
127 create_provider(&gApp);
129 while (ret >= 0 && gApp.exit == 0) {
130 wl_cb = wl_display_sync(dpy);
131 wl_callback_add_listener(wl_cb, &do_done_impl, &gApp);
132 ret = wl_display_dispatch(dpy);