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);
99
RemoteWindowBuffer::~RemoteWindowBuffer()
101
this->m_gralloc->unregisterBuffer(this->m_gralloc, this->handle);
102
native_handle_close(this->handle);
103
native_handle_delete(const_cast<native_handle_t*>(this->handle));