From: Seunghun Lee Date: Wed, 5 Jul 2023 00:45:26 +0000 (+0900) Subject: e_comp_wl_buffer: Split out from e_comp_wl X-Git-Tag: accepted/tizen/unified/20230726.020650~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F80%2F295980%2F1;p=platform%2Fupstream%2Fenlightenment.git e_comp_wl_buffer: Split out from e_comp_wl Change-Id: Ibcc25759449243c7d820fd03f48a773912cc3868 --- diff --git a/src/bin/Makefile.mk b/src/bin/Makefile.mk index 2d1fa77..8e1194b 100644 --- a/src/bin/Makefile.mk +++ b/src/bin/Makefile.mk @@ -274,7 +274,8 @@ src/bin/e_map.c \ 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 diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 9d17003..d44ffc1 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -1,14 +1,13 @@ #include "e.h" #include "e_foreign.h" #include "e_wtz_shell.h" +#include "e_comp_wl_private.h" #include #include #include #include -#include -#include #include /* handle include for printing uint64_t */ @@ -39,15 +38,6 @@ typedef struct _E_Comp_Wl_Key_Data 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; @@ -2278,46 +2268,6 @@ _e_comp_wl_evas_cb_color_set(void *data, Evas_Object *obj, void *event EINA_UNUS } 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; @@ -4879,268 +4829,6 @@ e_comp_wl_surface_commit(E_Client *ec) 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) { @@ -6984,4 +6672,4 @@ EINTERN void e_comp_wl_client_surface_set(E_Client *ec, struct wl_resource *surf 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 +} diff --git a/src/bin/e_comp_wl_buffer.c b/src/bin/e_comp_wl_buffer.c new file mode 100644 index 0000000..da89341 --- /dev/null +++ b/src/bin/e_comp_wl_buffer.c @@ -0,0 +1,311 @@ +#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; +} + diff --git a/src/bin/e_comp_wl_buffer.h b/src/bin/e_comp_wl_buffer.h new file mode 100644 index 0000000..2b5724f --- /dev/null +++ b/src/bin/e_comp_wl_buffer.h @@ -0,0 +1,6 @@ +#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 diff --git a/src/bin/e_comp_wl_private.h b/src/bin/e_comp_wl_private.h new file mode 100644 index 0000000..f2bdf58 --- /dev/null +++ b/src/bin/e_comp_wl_private.h @@ -0,0 +1,19 @@ +#ifndef E_COMP_WL_PRIVATE_H +#define E_COMP_WL_PRIVATE_H + +#include +#include + +#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