2 * Copyright © 2012 Collabora, Ltd.
4 * Permission to use, copy, modify, distribute, and sell this software and
5 * its documentation for any purpose is hereby granted without fee, provided
6 * that the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of the copyright holders not be used in
9 * advertising or publicity pertaining to distribution of the software
10 * without specific, written prior permission. The copyright holders make
11 * no representations about the suitability of this software for any
12 * purpose. It is provided "as is" without express or implied warranty.
14 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
15 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
17 * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
18 * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
19 * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
20 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
26 #include "server_wlegl_buffer.h"
27 #include "server_wlegl_private.h"
30 destroy(struct wl_client
*client
, struct wl_resource
*resource
)
32 wl_resource_destroy(resource
);
35 static const struct wl_buffer_interface server_wlegl_buffer_impl
= {
40 server_wlegl_buffer_from(struct wl_buffer
*buffer
)
42 if (buffer
->resource
.object
.implementation
!=
43 (void (**)(void)) &server_wlegl_buffer_impl
)
46 return container_of(buffer
, server_wlegl_buffer
, base
);
50 server_wlegl_buffer_dtor(struct wl_resource
*resource
)
52 struct wl_buffer
*base
=
53 reinterpret_cast<struct wl_buffer
*>(resource
->data
);
54 server_wlegl_buffer
*buffer
= server_wlegl_buffer_from(base
);
55 buffer
->buf
->common
.decRef(&buffer
->buf
->common
);
60 server_wlegl_buffer_create(uint32_t id
,
66 buffer_handle_t handle
,
69 server_wlegl_buffer
*buffer
= new server_wlegl_buffer
;
72 memset(buffer
, 0, sizeof(*buffer
));
74 buffer
->wlegl
= wlegl
;
76 buffer
->base
.resource
.object
.id
= id
;
77 buffer
->base
.resource
.object
.interface
= &wl_buffer_interface
;
78 buffer
->base
.resource
.object
.implementation
=
79 (void (**)(void)) &server_wlegl_buffer_impl
;
81 buffer
->base
.resource
.data
= &buffer
->base
;
82 buffer
->base
.resource
.destroy
= server_wlegl_buffer_dtor
;
84 buffer
->base
.width
= width
;
85 buffer
->base
.height
= height
;
87 ret
= wlegl
->gralloc
->registerBuffer(wlegl
->gralloc
, handle
);
93 buffer
->buf
= new RemoteWindowBuffer(
94 width
, height
, stride
, format
, usage
, handle
, wlegl
->gralloc
);
95 buffer
->buf
->common
.incRef(&buffer
->buf
->common
);