src/bin/e_wtz_shell.c \
src/bin/e_device.c \
src/bin/e_input_event.c \
-src/bin/e_single_pixel_buffer.c
+src/bin/e_single_pixel_buffer.c \
+src/bin/e_comp_wl_buffer.c
src_bin_enlightenment_CPPFLAGS = $(E_CPPFLAGS) -DEFL_BETA_API_SUPPORT -DEFL_EO_API_SUPPORT -DE_LOGGING=2 @WAYLAND_CFLAGS@ $(TTRACE_CFLAGS) $(DLOG_CFLAGS) $(PIXMAN_CFLAGS) $(POLICY_CFLAGS) $(EGL_CFLAGS)
if HAVE_LIBGOMP
#include "e.h"
#include "e_foreign.h"
#include "e_wtz_shell.h"
+#include "e_comp_wl_private.h"
#include <tizen-extension-server-protocol.h>
#include <relative-pointer-unstable-v1-server-protocol.h>
#include <pointer-constraints-unstable-v1-server-protocol.h>
#include <wayland-tbm-server.h>
-#include <gbm.h>
-#include <Evas_GL.h>
#include <glib.h>
/* handle include for printing uint64_t */
Ecore_Device *dev;
} E_Comp_Wl_Key_Data;
-struct _E_Comp_Wl_Evas_Gl
-{
- Evas_GL *gl;
- Evas_GL_Config *glcfg;
- Evas_GL_Context *glctx;
- Evas_GL_Surface *glsfc;
- Evas_GL_API *glapi;
-};
-
static Eina_List *handlers = NULL;
static E_Client *cursor_timer_ec = NULL;
static Eina_Bool need_send_released = EINA_FALSE;
}
static void
-_e_comp_wl_buffer_reference_cb_destroy(struct wl_listener *listener, void *data)
-{
- E_Comp_Wl_Buffer_Ref *ref;
-
- ref = container_of(listener, E_Comp_Wl_Buffer_Ref, destroy_listener);
- if ((E_Comp_Wl_Buffer *)data != ref->buffer) return;
- ref->buffer = NULL;
- ref->destroy_listener_usable = EINA_FALSE;
-}
-
-static void
-_e_comp_wl_buffer_cb_destroy(struct wl_listener *listener, void *data EINA_UNUSED)
-{
- E_Comp_Wl_Buffer *buffer;
-
- buffer = container_of(listener, E_Comp_Wl_Buffer, destroy_listener);
-
- DBG("Wl Buffer Destroy: b %p owner '%s'(%p)",
- buffer, buffer->debug_info.owner_name, buffer->debug_info.owner_ptr);
-
- /* remove debug info */
- eina_stringshare_del(buffer->debug_info.owner_name);
-
- if (buffer->tbm_surface) tbm_surface_internal_unref(buffer->tbm_surface);
-
- if (buffer->buffer_release)
- e_explicit_sync_buffer_release_destroy(buffer->buffer_release);
-
- wl_signal_emit(&buffer->destroy_signal, buffer);
-
- if (buffer->destroy_listener.notify)
- {
- wl_list_remove(&buffer->destroy_listener.link);
- buffer->destroy_listener.notify = NULL;
- }
-
- free(buffer);
-}
-
-static void
_e_comp_wl_buffer_damage_set(E_Comp_Wl_Buffer *buffer, Eina_List *buffer_damages)
{
Eina_Rectangle *damage_rect = NULL;
return EINA_TRUE;
}
-static void
-_e_comp_wl_buffer_ref(E_Comp_Wl_Buffer *buffer)
-{
- buffer->busy++;
-}
-
-static void
-_e_comp_wl_buffer_unref(E_Comp_Wl_Buffer *buffer)
-{
- buffer->busy--;
- if (buffer->busy != 0)
- return;
-
- if (buffer->buffer_release)
- {
- e_explicit_sync_buffer_release_destroy(buffer->buffer_release);
- buffer->buffer_release = NULL;
- }
-
- if (buffer->resource)
- {
- if (!wl_resource_get_client(buffer->resource)) return;
-
- wl_buffer_send_release(buffer->resource);
-#ifdef HAVE_WAYLAND_TBM
- wayland_tbm_server_increase_buffer_sync_timeline(e_comp_wl->tbm.server,
- buffer->resource, 1);
-#endif
- }
- else
- {
- if (buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)
- e_comp_wl_tbm_buffer_destroy(buffer);
- }
-}
-
-E_API void
-e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
-{
- if (ref->buffer == buffer)
- return;
-
- if (ref->buffer)
- {
- _e_comp_wl_buffer_unref(ref->buffer);
-
- if (ref->destroy_listener_usable)
- {
- wl_list_remove(&ref->destroy_listener.link);
- ref->destroy_listener_usable = EINA_FALSE;
- }
- }
-
- if (buffer)
- {
- _e_comp_wl_buffer_ref(buffer);
-
- ref->destroy_listener.notify = _e_comp_wl_buffer_reference_cb_destroy;
- wl_signal_add(&buffer->destroy_signal, &ref->destroy_listener);
-
- ref->destroy_listener_usable = EINA_TRUE;
- }
-
- ref->buffer = buffer;
-}
-
-static Eina_Bool
-_e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *buffer, struct wl_resource *resource,
- E_Client *ec)
-{
- tbm_surface_h tsurface;
- struct gbm_bo *gbo;
-
- if (!buffer || !resource || !ec) return EINA_FALSE;
-
- tsurface = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
- if (tsurface)
- {
- tbm_surface_internal_ref(tsurface);
- }
- else
- {
- if (!e_comp->e_comp_screen->gdevice) return EINA_FALSE;
-
- gbo = gbm_bo_import(e_comp->e_comp_screen->gdevice, GBM_BO_IMPORT_WL_BUFFER,
- resource, GBM_BO_USE_RENDERING);
- if (!gbo) return EINA_FALSE;
-
- tsurface = e_comp_wl_tbm_import_gbm_bo(gbo);
- if (!tsurface)
- {
- gbm_bo_destroy(gbo);
- return EINA_FALSE;
- }
-
- if (!e_comp_wl_tbm_gbm_bo_user_data_set(tsurface, gbo))
- {
- tbm_surface_destroy(tsurface);
- gbm_bo_destroy(gbo);
- return EINA_FALSE;
- }
- }
-
- if ((ec) && (ec->comp_data->video_client))
- {
- buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
- buffer->w = buffer->h = 1;
- buffer->format = 0;
- }
- else if ((ec) && (e_client_video_hw_composition_check(ec)))
- {
- buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
- buffer->w = tbm_surface_get_width(tsurface);
- buffer->h = tbm_surface_get_height(tsurface);
- buffer->format = tbm_surface_get_format(tsurface);
- }
- else
- {
- buffer->type = E_COMP_WL_BUFFER_TYPE_TBM;
- buffer->w = tbm_surface_get_width(tsurface);
- buffer->h = tbm_surface_get_height(tsurface);
- buffer->format = tbm_surface_get_format(tsurface);
- }
-
- buffer->tbm_surface = tsurface;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_e_comp_wl_buffer_native_type_get(E_Comp_Wl_Buffer *buffer, struct wl_resource *resource,
- E_Client *ec)
-{
- Eina_Bool res;
-
- if (!buffer || !resource || !ec) return EINA_FALSE;
-
- buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
- res = e_comp_wl->evas_gl->glapi->evasglQueryWaylandBuffer(e_comp_wl->evas_gl->gl,
- resource,
- EVAS_GL_WIDTH,
- &buffer->w);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
- res = e_comp_wl->evas_gl->glapi->evasglQueryWaylandBuffer(e_comp_wl->evas_gl->gl,
- resource,
- EVAS_GL_HEIGHT,
- &buffer->h);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
- res = e_comp_wl->evas_gl->glapi->evasglQueryWaylandBuffer(e_comp_wl->evas_gl->gl,
- resource,
- EVAS_GL_TEXTURE_FORMAT,
- &buffer->format);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
-
- return EINA_TRUE;
-}
-
-/**
- * Get the buffer for a given resource.
- *
- * Retrieves the Wayland SHM buffer for the resource and
- * uses it to create a new E_Comp_Wl_Buffer object. This
- * buffer will be freed when the resource is destroyed.
- *
- * @param resource that owns the desired buffer
- * @returns a new E_Comp_Wl_Buffer object
- */
-EINTERN E_Comp_Wl_Buffer *
-e_comp_wl_buffer_get(struct wl_resource *resource, E_Client *ec)
-{
- E_Comp_Wl_Buffer *buffer = NULL;
- struct wl_listener *listener;
- struct wl_shm_buffer *shmbuff;
- E_Single_Pixel_Buffer *single_pixel_buffer;
- Eina_Bool res;
-
- listener =
- wl_resource_get_destroy_listener(resource, _e_comp_wl_buffer_cb_destroy);
- if (listener)
- {
- buffer = container_of(listener, E_Comp_Wl_Buffer, destroy_listener);
- goto update;
- }
-
- if (!(buffer = E_NEW(E_Comp_Wl_Buffer, 1))) return NULL;
-
- shmbuff = wl_shm_buffer_get(resource);
- if (shmbuff)
- {
- buffer->type = E_COMP_WL_BUFFER_TYPE_SHM;
- buffer->w = wl_shm_buffer_get_width(shmbuff);
- buffer->h = wl_shm_buffer_get_height(shmbuff);
- buffer->format = wl_shm_buffer_get_format(shmbuff);
- buffer->shm_buffer = shmbuff;
- }
-
- if (!buffer->type)
- {
- single_pixel_buffer = e_single_pixel_buffer_manager_buffer_get(resource);
- if (single_pixel_buffer)
- {
- buffer->type = E_COMP_WL_BUFFER_TYPE_SINGLE_PIXEL;
- buffer->w = 1;
- buffer->h = 1;
- buffer->format = WL_SHM_FORMAT_ARGB8888;
- buffer->single_pixel_buffer = single_pixel_buffer;
- }
- }
-
- if (!buffer->type)
- {
- /* TODO: This option is temporarily. It will be removed later. */
- /* prefer to use native buffer(wl_buffer) */
- if (e_comp->use_native_type_buffer)
- {
- if (e_comp->gl)
- {
- res = _e_comp_wl_buffer_native_type_get(buffer, resource, ec);
- EINA_SAFETY_ON_FALSE_GOTO(res, err);
- }
- else
- {
- res = _e_comp_wl_buffer_tbm_type_get(buffer, resource, ec);
- EINA_SAFETY_ON_FALSE_GOTO(res, err);
- }
- }
- else
- {
- res = _e_comp_wl_buffer_tbm_type_get(buffer, resource, ec);
- if (!res && e_comp->gl)
- res = _e_comp_wl_buffer_native_type_get(buffer,resource, ec);
-
- EINA_SAFETY_ON_FALSE_GOTO(res, err);
- }
- }
-
- buffer->resource = resource;
- wl_signal_init(&buffer->destroy_signal);
- buffer->destroy_listener.notify = _e_comp_wl_buffer_cb_destroy;
- wl_resource_add_destroy_listener(resource, &buffer->destroy_listener);
-
- if (ec)
- {
- buffer->debug_info.owner_ptr = (void *)ec;
- buffer->debug_info.owner_name = eina_stringshare_add(ec->icccm.name?:"");
- }
-
- DBG("Wl Buffer Create: b %p owner '%s'(%p)",
- buffer, buffer->debug_info.owner_name, buffer->debug_info.owner_ptr);
-
-update:
- if (buffer->tbm_surface)
- buffer->transform = wayland_tbm_server_buffer_get_buffer_transform(NULL, resource);
-
- return buffer;
-
-err:
- ERR("Invalid resource:%u", wl_resource_get_id(resource));
- E_FREE(buffer);
- return NULL;
-}
-
static E_Comp_Wl_Output *
_e_comp_wl_output_get(Eina_List *outputs, const char *id)
{
g_mutex_lock(&ec->comp_data->surface_mutex);
ec->comp_data->surface = surface;
g_mutex_unlock(&ec->comp_data->surface_mutex);
-}
\ No newline at end of file
+}
--- /dev/null
+#include "e_comp_wl_private.h"
+
+static void _e_comp_wl_buffer_ref(E_Comp_Wl_Buffer *buffer);
+static void _e_comp_wl_buffer_unref(E_Comp_Wl_Buffer *buffer);
+static void _e_comp_wl_buffer_reference_cb_destroy(struct wl_listener *listener, void *data);
+static void _e_comp_wl_buffer_cb_destroy(struct wl_listener *listener, void *data);
+static Eina_Bool _e_comp_wl_buffer_native_type_get(E_Comp_Wl_Buffer *buffer, struct wl_resource *resource, E_Client *ec);
+static Eina_Bool _e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *buffer, struct wl_resource *resource, E_Client *ec);
+
+E_API void
+e_comp_wl_buffer_reference(E_Comp_Wl_Buffer_Ref *ref, E_Comp_Wl_Buffer *buffer)
+{
+ if (ref->buffer == buffer)
+ return;
+
+ if (ref->buffer)
+ {
+ _e_comp_wl_buffer_unref(ref->buffer);
+
+ if (ref->destroy_listener_usable)
+ {
+ wl_list_remove(&ref->destroy_listener.link);
+ ref->destroy_listener_usable = EINA_FALSE;
+ }
+ }
+
+ if (buffer)
+ {
+ _e_comp_wl_buffer_ref(buffer);
+
+ ref->destroy_listener.notify = _e_comp_wl_buffer_reference_cb_destroy;
+ wl_signal_add(&buffer->destroy_signal, &ref->destroy_listener);
+
+ ref->destroy_listener_usable = EINA_TRUE;
+ }
+
+ ref->buffer = buffer;
+}
+
+/**
+ * Get the buffer for a given resource.
+ *
+ * Retrieves the Wayland SHM buffer for the resource and
+ * uses it to create a new E_Comp_Wl_Buffer object. This
+ * buffer will be freed when the resource is destroyed.
+ *
+ * @param resource that owns the desired buffer
+ * @returns a new E_Comp_Wl_Buffer object
+ */
+EINTERN E_Comp_Wl_Buffer *
+e_comp_wl_buffer_get(struct wl_resource *resource, E_Client *ec)
+{
+ E_Comp_Wl_Buffer *buffer = NULL;
+ struct wl_listener *listener;
+ struct wl_shm_buffer *shmbuff;
+ E_Single_Pixel_Buffer *single_pixel_buffer;
+ Eina_Bool res;
+
+ listener =
+ wl_resource_get_destroy_listener(resource, _e_comp_wl_buffer_cb_destroy);
+ if (listener)
+ {
+ buffer = container_of(listener, E_Comp_Wl_Buffer, destroy_listener);
+ goto update;
+ }
+
+ if (!(buffer = E_NEW(E_Comp_Wl_Buffer, 1))) return NULL;
+
+ shmbuff = wl_shm_buffer_get(resource);
+ if (shmbuff)
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_SHM;
+ buffer->w = wl_shm_buffer_get_width(shmbuff);
+ buffer->h = wl_shm_buffer_get_height(shmbuff);
+ buffer->format = wl_shm_buffer_get_format(shmbuff);
+ buffer->shm_buffer = shmbuff;
+ }
+
+ if (!buffer->type)
+ {
+ single_pixel_buffer = e_single_pixel_buffer_manager_buffer_get(resource);
+ if (single_pixel_buffer)
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_SINGLE_PIXEL;
+ buffer->w = 1;
+ buffer->h = 1;
+ buffer->format = WL_SHM_FORMAT_ARGB8888;
+ buffer->single_pixel_buffer = single_pixel_buffer;
+ }
+ }
+
+ if (!buffer->type)
+ {
+ /* TODO: This option is temporarily. It will be removed later. */
+ /* prefer to use native buffer(wl_buffer) */
+ if (e_comp->use_native_type_buffer)
+ {
+ if (e_comp->gl)
+ {
+ res = _e_comp_wl_buffer_native_type_get(buffer, resource, ec);
+ EINA_SAFETY_ON_FALSE_GOTO(res, err);
+ }
+ else
+ {
+ res = _e_comp_wl_buffer_tbm_type_get(buffer, resource, ec);
+ EINA_SAFETY_ON_FALSE_GOTO(res, err);
+ }
+ }
+ else
+ {
+ res = _e_comp_wl_buffer_tbm_type_get(buffer, resource, ec);
+ if (!res && e_comp->gl)
+ res = _e_comp_wl_buffer_native_type_get(buffer,resource, ec);
+
+ EINA_SAFETY_ON_FALSE_GOTO(res, err);
+ }
+ }
+
+ buffer->resource = resource;
+ wl_signal_init(&buffer->destroy_signal);
+ buffer->destroy_listener.notify = _e_comp_wl_buffer_cb_destroy;
+ wl_resource_add_destroy_listener(resource, &buffer->destroy_listener);
+
+ if (ec)
+ {
+ buffer->debug_info.owner_ptr = (void *)ec;
+ buffer->debug_info.owner_name = eina_stringshare_add(ec->icccm.name?:"");
+ }
+
+ DBG("Wl Buffer Create: b %p owner '%s'(%p)",
+ buffer, buffer->debug_info.owner_name, buffer->debug_info.owner_ptr);
+
+update:
+ if (buffer->tbm_surface)
+ buffer->transform = wayland_tbm_server_buffer_get_buffer_transform(NULL, resource);
+
+ return buffer;
+
+err:
+ ERR("Invalid resource:%u", wl_resource_get_id(resource));
+ E_FREE(buffer);
+ return NULL;
+}
+
+static void
+_e_comp_wl_buffer_ref(E_Comp_Wl_Buffer *buffer)
+{
+ buffer->busy++;
+}
+
+static void
+_e_comp_wl_buffer_unref(E_Comp_Wl_Buffer *buffer)
+{
+ buffer->busy--;
+ if (buffer->busy != 0)
+ return;
+
+ if (buffer->buffer_release)
+ {
+ e_explicit_sync_buffer_release_destroy(buffer->buffer_release);
+ buffer->buffer_release = NULL;
+ }
+
+ if (buffer->resource)
+ {
+ if (!wl_resource_get_client(buffer->resource)) return;
+
+ wl_buffer_send_release(buffer->resource);
+#ifdef HAVE_WAYLAND_TBM
+ wayland_tbm_server_increase_buffer_sync_timeline(e_comp_wl->tbm.server,
+ buffer->resource, 1);
+#endif
+ }
+ else
+ {
+ if (buffer->type == E_COMP_WL_BUFFER_TYPE_TBM)
+ e_comp_wl_tbm_buffer_destroy(buffer);
+ }
+}
+
+static void
+_e_comp_wl_buffer_reference_cb_destroy(struct wl_listener *listener, void *data)
+{
+ E_Comp_Wl_Buffer_Ref *ref;
+
+ ref = container_of(listener, E_Comp_Wl_Buffer_Ref, destroy_listener);
+ if ((E_Comp_Wl_Buffer *)data != ref->buffer) return;
+ ref->buffer = NULL;
+ ref->destroy_listener_usable = EINA_FALSE;
+}
+
+static void
+_e_comp_wl_buffer_cb_destroy(struct wl_listener *listener, void *data EINA_UNUSED)
+{
+ E_Comp_Wl_Buffer *buffer;
+
+ buffer = container_of(listener, E_Comp_Wl_Buffer, destroy_listener);
+
+ DBG("Wl Buffer Destroy: b %p owner '%s'(%p)",
+ buffer, buffer->debug_info.owner_name, buffer->debug_info.owner_ptr);
+
+ /* remove debug info */
+ eina_stringshare_del(buffer->debug_info.owner_name);
+
+ if (buffer->tbm_surface) tbm_surface_internal_unref(buffer->tbm_surface);
+
+ if (buffer->buffer_release)
+ e_explicit_sync_buffer_release_destroy(buffer->buffer_release);
+
+ wl_signal_emit(&buffer->destroy_signal, buffer);
+
+ if (buffer->destroy_listener.notify)
+ {
+ wl_list_remove(&buffer->destroy_listener.link);
+ buffer->destroy_listener.notify = NULL;
+ }
+
+ free(buffer);
+}
+
+static Eina_Bool
+_e_comp_wl_buffer_native_type_get(E_Comp_Wl_Buffer *buffer, struct wl_resource *resource,
+ E_Client *ec)
+{
+ Eina_Bool res;
+
+ if (!buffer || !resource || !ec) return EINA_FALSE;
+
+ buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
+ res = e_comp_wl->evas_gl->glapi->evasglQueryWaylandBuffer(e_comp_wl->evas_gl->gl,
+ resource,
+ EVAS_GL_WIDTH,
+ &buffer->w);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
+ res = e_comp_wl->evas_gl->glapi->evasglQueryWaylandBuffer(e_comp_wl->evas_gl->gl,
+ resource,
+ EVAS_GL_HEIGHT,
+ &buffer->h);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
+ res = e_comp_wl->evas_gl->glapi->evasglQueryWaylandBuffer(e_comp_wl->evas_gl->gl,
+ resource,
+ EVAS_GL_TEXTURE_FORMAT,
+ &buffer->format);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *buffer, struct wl_resource *resource,
+ E_Client *ec)
+{
+ tbm_surface_h tsurface;
+ struct gbm_bo *gbo;
+
+ if (!buffer || !resource || !ec) return EINA_FALSE;
+
+ tsurface = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
+ if (tsurface)
+ {
+ tbm_surface_internal_ref(tsurface);
+ }
+ else
+ {
+ if (!e_comp->e_comp_screen->gdevice) return EINA_FALSE;
+
+ gbo = gbm_bo_import(e_comp->e_comp_screen->gdevice, GBM_BO_IMPORT_WL_BUFFER,
+ resource, GBM_BO_USE_RENDERING);
+ if (!gbo) return EINA_FALSE;
+
+ tsurface = e_comp_wl_tbm_import_gbm_bo(gbo);
+ if (!tsurface)
+ {
+ gbm_bo_destroy(gbo);
+ return EINA_FALSE;
+ }
+
+ if (!e_comp_wl_tbm_gbm_bo_user_data_set(tsurface, gbo))
+ {
+ tbm_surface_destroy(tsurface);
+ gbm_bo_destroy(gbo);
+ return EINA_FALSE;
+ }
+ }
+
+ if ((ec) && (ec->comp_data->video_client))
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
+ buffer->w = buffer->h = 1;
+ buffer->format = 0;
+ }
+ else if ((ec) && (e_client_video_hw_composition_check(ec)))
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
+ buffer->w = tbm_surface_get_width(tsurface);
+ buffer->h = tbm_surface_get_height(tsurface);
+ buffer->format = tbm_surface_get_format(tsurface);
+ }
+ else
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_TBM;
+ buffer->w = tbm_surface_get_width(tsurface);
+ buffer->h = tbm_surface_get_height(tsurface);
+ buffer->format = tbm_surface_get_format(tsurface);
+ }
+
+ buffer->tbm_surface = tsurface;
+
+ return EINA_TRUE;
+}
+
--- /dev/null
+#ifndef E_COMP_WL_BUFFER_H
+#define E_COMP_WL_BUFFER_H
+
+EINTERN E_Comp_Wl_Buffer *e_comp_wl_buffer_get(struct wl_resource *resource, E_Client *ec);
+
+#endif
--- /dev/null
+#ifndef E_COMP_WL_PRIVATE_H
+#define E_COMP_WL_PRIVATE_H
+
+#include <gbm.h>
+#include <Evas_GL.h>
+
+#include "e.h"
+#include "e_comp_wl_buffer.h"
+
+struct _E_Comp_Wl_Evas_Gl
+{
+ Evas_GL *gl;
+ Evas_GL_Config *glcfg;
+ Evas_GL_Context *glctx;
+ Evas_GL_Surface *glsfc;
+ Evas_GL_API *glapi;
+};
+
+#endif