mirror of
https://github.com/brl/mutter.git
synced 2024-12-28 22:02:14 +00:00
eed4dab0fc
This commit adds for a new type of buffer being attached to a Wayland surface: buffers from an EGLStream. These buffers behave very differently from regular Wayland buffers; instead of each buffer reperesenting an actual frame, the same buffer is attached over and over again, and EGL API is used to switch the content of the OpenGL texture associated with the buffer attached. It more or less side-tracks the Wayland buffer handling. It is implemented by creating a MetaWaylandEglStream object, dealing with the EGLStream state. The lifetime of the MetaWaylandEglStream is tied to the texture object (CoglTexture), which is referenced-counted and owned by both the actors and the MetaWaylandBuffer. When the buffer is reattached and committed, the EGLStream is triggered to switch the content of the associated texture to the new content. This means that one cannot keep old texture content around without copying, so any feature relying on that will effectively be broken. https://bugzilla.gnome.org/show_bug.cgi?id=773629
64 lines
2.3 KiB
C
64 lines
2.3 KiB
C
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
|
|
/*
|
|
* Copyright (C) 2014 Endless Mobile
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
* 02111-1307, USA.
|
|
*
|
|
* Written by:
|
|
* Jasper St. Pierre <jstpierre@mecheye.net>
|
|
*/
|
|
|
|
#ifndef META_WAYLAND_BUFFER_H
|
|
#define META_WAYLAND_BUFFER_H
|
|
|
|
#include <cogl/cogl.h>
|
|
#include <cairo.h>
|
|
#include <wayland-server.h>
|
|
|
|
#include "meta-wayland-types.h"
|
|
#include "meta-wayland-egl-stream.h"
|
|
|
|
struct _MetaWaylandBuffer
|
|
{
|
|
GObject parent;
|
|
|
|
struct wl_resource *resource;
|
|
struct wl_listener destroy_listener;
|
|
|
|
CoglTexture *texture;
|
|
gboolean is_y_inverted;
|
|
|
|
struct {
|
|
MetaWaylandEglStream *stream;
|
|
} egl_stream;
|
|
};
|
|
|
|
#define META_TYPE_WAYLAND_BUFFER (meta_wayland_buffer_get_type ())
|
|
G_DECLARE_FINAL_TYPE (MetaWaylandBuffer, meta_wayland_buffer,
|
|
META, WAYLAND_BUFFER, GObject);
|
|
|
|
MetaWaylandBuffer * meta_wayland_buffer_from_resource (struct wl_resource *resource);
|
|
gboolean meta_wayland_buffer_attach (MetaWaylandBuffer *buffer,
|
|
GError **error);
|
|
CoglTexture * meta_wayland_buffer_get_texture (MetaWaylandBuffer *buffer);
|
|
CoglSnippet * meta_wayland_buffer_create_snippet (MetaWaylandBuffer *buffer);
|
|
gboolean meta_wayland_buffer_is_y_inverted (MetaWaylandBuffer *buffer);
|
|
void meta_wayland_buffer_process_damage (MetaWaylandBuffer *buffer,
|
|
cairo_region_t *region);
|
|
|
|
#endif /* META_WAYLAND_BUFFER_H */
|