Exemplo n.º 1
0
Arquivo: cogland.c Projeto: 3v1n0/cogl
static void
cogland_buffer_reference (CoglandBufferReference *ref,
                          CoglandBuffer *buffer)
{
  if (ref->buffer && buffer != ref->buffer)
    {
      ref->buffer->busy_count--;

      if (ref->buffer->busy_count == 0)
        {
          g_assert (wl_resource_get_client (ref->buffer->resource));
          wl_resource_queue_event (ref->buffer->resource, WL_BUFFER_RELEASE);
        }

      wl_list_remove (&ref->destroy_listener.link);
    }

  if (buffer && buffer != ref->buffer)
    {
      buffer->busy_count++;
      wl_signal_add (&buffer->destroy_signal, &ref->destroy_listener);
    }

  ref->buffer = buffer;
  ref->destroy_listener.notify = cogland_buffer_reference_handle_destroy;
}
Exemplo n.º 2
0
void
meta_wayland_buffer_unref (MetaWaylandBuffer *buffer)
{
  buffer->ref_count--;
  if (buffer->ref_count == 0)
    {
      g_clear_pointer (&buffer->texture, cogl_object_unref);
      wl_resource_queue_event (buffer->resource, WL_BUFFER_RELEASE);
    }
}
Exemplo n.º 3
0
Arquivo: buffer.c Projeto: hsoft/wlc
void
wlc_buffer_release(struct wlc_buffer *buffer)
{
   struct wlc_surface *surface;
   if ((surface = convert_from_wlc_resource(buffer->surface, "surface"))) {
      if (surface->commit.buffer == convert_to_wlc_resource(buffer))
         surface->commit.buffer = 0;
      if (surface->pending.buffer == convert_to_wlc_resource(buffer))
         surface->pending.buffer = 0;
   }

   struct wl_resource *resource;
   if ((resource = convert_to_wl_resource(buffer, "buffer"))) {
      wlc_resource_invalidate(convert_to_wlc_resource(buffer));
      wl_resource_queue_event(resource, WL_BUFFER_RELEASE);
   }
}