evas: factorize call to info and info_free.

This commit is contained in:
Cedric BAIL 2017-08-25 10:48:13 -07:00
parent 1e2bbf8fea
commit 46e1df839b
18 changed files with 126 additions and 317 deletions

View File

@ -1038,13 +1038,26 @@ evas_output_method_set(Evas *eo_e, int render_method)
e->engine.module = em;
evas_module_ref(em);
/* get the engine info struct */
if (e->engine.func->output_info)
if (e->engine.func->info_size)
{
Efl_Canvas_Output *output;
Eina_List *l;
EINA_LIST_FOREACH(e->outputs, l, output)
if (!output->info) output->info = e->engine.func->output_info();
if (!output->info)
{
output->info = calloc(1, e->engine.func->info_size);
if (!output->info) continue ;
output->info->magic = rand();
output->info_magic = output->info->magic;
if (e->engine.func->output_info_setup)
e->engine.func->output_info_setup(output->info);
}
}
else
{
CRI("Engine not up to date no info size provided.");
}
// Wayland/drm already handles seats.

View File

@ -38,11 +38,22 @@ efl_canvas_output_add(Evas *canvas)
// The engine is already initialized, use it
// right away to setup the info structure
if (e->engine.func->output_info)
if (e->engine.func->info_size)
{
r->info = e->engine.func->output_info();
r->info = calloc(1, e->engine.func->info_size);
if (!r->info) goto on_error;
r->info->magic = rand();
r->info_magic = r->info->magic;
if (e->engine.func->output_info_setup)
e->engine.func->output_info_setup(r->info);
}
else
{
CRI("Engine not up to date no info size provided.");
}
on_error:
return r;
}
@ -62,7 +73,8 @@ efl_canvas_output_del(Efl_Canvas_Output *output)
output->ector);
e->engine.func->output_free(_evas_engine_context(e),
output->output);
e->engine.func->output_info_free(output->info);
free(output->info);
output->info = NULL;
}
e->outputs = eina_list_remove(e->outputs, output);

View File

@ -1334,7 +1334,8 @@ struct _Efl_Canvas_Output
Ector_Surface *ector;
void *info, *output;
Evas_Engine_Info *info;
void *output;
Evas_Coord x, y, w, h;
int info_magic;
@ -1393,10 +1394,9 @@ struct _Evas_Object_Func
struct _Evas_Func
{
void *(*output_info) (void);
void (*output_info_free) (void *info);
void *(*output_setup) (void *engine, void *info, unsigned int w, unsigned int h);
int (*output_update) (void *engine, void *data, void *info, unsigned int w, unsigned int h);
void (*output_info_setup) (void *info);
void *(*output_setup) (void *engine, void *info, unsigned int w, unsigned int h);
int (*output_update) (void *engine, void *data, void *info, unsigned int w, unsigned int h);
void (*output_free) (void *engine, void *data);
void (*output_resize) (void *engine, void *data, int w, int h);
@ -1616,6 +1616,8 @@ struct _Evas_Func
Evas_Filter_Support (*gfx_filter_supports) (void *engine, Evas_Filter_Command *cmd);
Eina_Bool (*gfx_filter_process) (void *engine, Evas_Filter_Command *cmd);
unsigned int info_size;
};
struct _Evas_Image_Save_Func

View File

@ -22,8 +22,6 @@ typedef Render_Output_Software_Generic Render_Engine;
/* prototypes we will use here */
static void *_output_setup(int w, int h, void *dest_buffer, int dest_buffer_row_bytes, int depth_type, int use_color_key, int alpha_threshold, int color_key_r, int color_key_g, int color_key_b, void *(*new_update_region) (int x, int y, int w, int h, int *row_bytes), void (*free_update_region) (int x, int y, int w, int h, void *data), void *(*switch_buffer) (void *data, void *dest_buffer), void *switch_data);
static void *eng_output_info(void);
static void eng_output_info_free(void *info);
static void eng_output_free(void *engine EINA_UNUSED, void *data);
/* internal engine routines */
@ -107,23 +105,12 @@ _output_setup(int w,
}
/* engine api this module provides */
static void *
eng_output_info(void)
{
Evas_Engine_Info_Buffer *info;
info = calloc(1, sizeof(Evas_Engine_Info_Buffer));
if (!info) return NULL;
info->magic.magic = rand();
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *info)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_Buffer *in;
in = (Evas_Engine_Info_Buffer *)info;
free(in);
Evas_Engine_Info_Buffer *einfo = info;
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void *
@ -190,11 +177,13 @@ module_open(Evas_Module *em)
func = pfunc;
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_info_setup);
ORD(output_setup);
ORD(canvas_alpha_get);
ORD(output_free);
func.info_size = sizeof (Evas_Engine_Info_Buffer);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -57,30 +57,12 @@ err:
return NULL;
}
static void *
eng_output_info(void)
{
Evas_Engine_Info_Drm *info;
/* try to allocate space for our engine info structure */
info = calloc(1, sizeof(Evas_Engine_Info_Drm));
if (!info) return NULL;
/* set some engine default properties */
info->magic.magic = rand();
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *einfo)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_Drm *info;
Evas_Engine_Info_Drm *einfo = info;
/* free the engine info */
info = (Evas_Engine_Info_Drm *)einfo;
free(info);
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void *
@ -251,14 +233,15 @@ module_open(Evas_Module *em)
func = pfunc;
/* override the methods we provide */
EVAS_API_OVERRIDE(output_info, &func, eng_);
EVAS_API_OVERRIDE(output_info_free, &func, eng_);
EVAS_API_OVERRIDE(output_info_setup, &func, eng_);
EVAS_API_OVERRIDE(output_setup, &func, eng_);
EVAS_API_OVERRIDE(output_update, &func, eng_);
EVAS_API_OVERRIDE(output_free, &func, eng_);
EVAS_API_OVERRIDE(image_plane_assign, &func, eng_);
EVAS_API_OVERRIDE(image_plane_release, &func, eng_);
func.info_size = sizeof (Evas_Engine_Info_Drm);
/* advertise our engine functions */
em->functions = (void *)(&func);

View File

@ -670,28 +670,12 @@ _native_cb_free(void *image)
}
/* engine specific override functions */
static void *
eng_output_info(void)
{
Evas_Engine_Info_Eglfs *info;
/* try to allocate space for our engine info */
if (!(info = calloc(1, sizeof(Evas_Engine_Info_Eglfs))))
return NULL;
info->magic.magic = rand();
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *in)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_Eglfs *info;
Evas_Engine_Info_Eglfs *einfo = info;
if ((info = (Evas_Engine_Info_Eglfs *)in))
free(info);
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void *
@ -1128,7 +1112,6 @@ module_open(Evas_Module *em)
/* now to override methods */
EVAS_API_OVERRIDE(output_info, &func, eng_);
EVAS_API_OVERRIDE(output_info_free, &func, eng_);
EVAS_API_OVERRIDE(output_setup, &func, eng_);
EVAS_API_OVERRIDE(output_update, &func, eng_);
EVAS_API_OVERRIDE(canvas_alpha_get, &func, eng_);
@ -1136,6 +1119,8 @@ module_open(Evas_Module *em)
EVAS_API_OVERRIDE(output_dump, &func, eng_);
EVAS_API_OVERRIDE(image_native_set, &func, eng_);
func.info_size = sizeof (Evas_Engine_Info_Eglfs);
setenv("EGL_PLATFORM", "fbdev", 1);
gl_symbols();

View File

@ -61,23 +61,12 @@ _output_setup(int w, int h, int rot, int vt, int dev, int refresh)
}
/* engine api this module provides */
static void *
eng_output_info(void)
{
Evas_Engine_Info_FB *info;
info = calloc(1, sizeof(Evas_Engine_Info_FB));
if (!info) return NULL;
info->magic.magic = rand();
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *info)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_FB *in;
in = (Evas_Engine_Info_FB *)info;
free(in);
Evas_Engine_Info_FB *einfo = info;
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void *
@ -135,11 +124,13 @@ module_open(Evas_Module *em)
func = pfunc;
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_info_setup);
ORD(output_setup);
ORD(canvas_alpha_get);
ORD(output_free);
func.info_size = sizeof (Evas_Engine_Info_FB);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -125,29 +125,6 @@ static const EVGL_Interface evgl_funcs =
NULL, // native_win_surface_config_get
};
static void *
eng_output_info(void)
{
Evas_Engine_Info_GL_Cocoa *info;
info = calloc(1, sizeof(*info));
if (EINA_UNLIKELY(!info))
{
CRI("Failed to allocate memory");
return NULL;
}
info->magic.magic = rand();
return info;
}
static void
eng_output_info_free(void *info)
{
Evas_Engine_Info_GL_Cocoa *const in = info;
free(in);
}
static void *
eng_output_setup(void *engine EINA_UNUSED, void *in, unsigned int w, unsigned int h)
{
@ -306,13 +283,13 @@ module_open(Evas_Module *em)
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_setup);
ORD(output_update);
ORD(canvas_alpha_get);
ORD(output_free);
func.info_size = sizeof (Evas_Engine_Info_GL_Cocoa);
_gl_symbols();
/* now advertise out own api */

View File

@ -891,28 +891,12 @@ _native_cb_free(void *image)
}
/* engine specific override functions */
static void *
eng_output_info(void)
{
Evas_Engine_Info_GL_Drm *info;
/* try to allocate space for our engine info */
if (!(info = calloc(1, sizeof(Evas_Engine_Info_GL_Drm))))
return NULL;
info->magic.magic = rand();
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *in)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_GL_Drm *info;
Evas_Engine_Info_GL_Drm *einfo = info;
if ((info = (Evas_Engine_Info_GL_Drm *)in))
free(info);
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static Render_Engine_Merge_Mode
@ -1489,8 +1473,7 @@ module_open(Evas_Module *em)
func = pfunc;
/* now to override methods */
EVAS_API_OVERRIDE(output_info, &func, eng_);
EVAS_API_OVERRIDE(output_info_free, &func, eng_);
EVAS_API_OVERRIDE(output_info_setup, &func, eng_);
EVAS_API_OVERRIDE(output_setup, &func, eng_);
EVAS_API_OVERRIDE(output_update, &func, eng_);
EVAS_API_OVERRIDE(canvas_alpha_get, &func, eng_);
@ -1502,6 +1485,8 @@ module_open(Evas_Module *em)
EVAS_API_OVERRIDE(image_plane_assign, &func, eng_);
EVAS_API_OVERRIDE(image_plane_release, &func, eng_);
func.info_size = sizeof (Evas_Engine_Info_GL_Drm);
/* Mesa's EGL driver loads wayland egl by default. (called by eglGetProcaddr() )
* implicit env set (EGL_PLATFORM=drm) prevent that. */
setenv("EGL_PLATFORM", "drm", 1);

View File

@ -266,26 +266,6 @@ static const EVGL_Interface evgl_funcs =
NULL, // native_win_surface_config_get
};
static void *
eng_output_info(void)
{
Evas_Engine_Info_GL_SDL *info;
info = calloc(1, sizeof(Evas_Engine_Info_GL_SDL));
if (!info) return NULL;
info->magic.magic = rand();
return info;
}
static void
eng_output_info_free(void *info)
{
Evas_Engine_Info_GL_SDL *in;
in = (Evas_Engine_Info_GL_SDL *)info;
free(in);
}
static void *
eng_output_setup(void *engine EINA_UNUSED, void *in, unsigned int w, unsigned int h)
{
@ -400,13 +380,13 @@ module_open(Evas_Module *em)
func = pfunc;
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_setup);
ORD(canvas_alpha_get);
ORD(output_free);
ORD(output_dump);
func.info_size = sizeof (Evas_Engine_Info_GL_SDL);
gl_symbols();
/* now advertise out own api */

View File

@ -1549,28 +1549,15 @@ int _evas_engine_GL_X11_log_dom = -1;
/* function tables - filled in later (func and parent func) */
static Evas_Func func, pfunc;
static void *
eng_output_info(void)
{
Evas_Engine_Info_GL_X11 *info;
info = calloc(1, sizeof(Evas_Engine_Info_GL_X11));
info->magic.magic = rand();
info->func.best_visual_get = eng_best_visual_get;
info->func.best_colormap_get = eng_best_colormap_get;
info->func.best_depth_get = eng_best_depth_get;
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *info)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_GL_X11 *in;
// dont free! why bother? its not worth it
// eina_log_domain_unregister(_evas_engine_GL_X11_log_dom);
in = (Evas_Engine_Info_GL_X11 *)info;
free(in);
Evas_Engine_Info_GL_X11 *einfo = info;
einfo->func.best_visual_get = eng_best_visual_get;
einfo->func.best_colormap_get = eng_best_colormap_get;
einfo->func.best_depth_get = eng_best_depth_get;
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void
@ -3044,8 +3031,7 @@ module_open(Evas_Module *em)
func = pfunc;
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_info_setup);
ORD(output_setup);
ORD(output_update);
ORD(canvas_alpha_get);
@ -3060,6 +3046,8 @@ module_open(Evas_Module *em)
// gl_current_surface_get is in gl generic
ORD(gl_current_context_get);
func.info_size = sizeof (Evas_Engine_Info_GL_X11);
if (!(platform_env = getenv("EGL_PLATFORM")))
setenv("EGL_PLATFORM", "x11", 0);

View File

@ -98,30 +98,12 @@ _output_setup(int w, int h)
}
/* engine api this module provides */
static void *
eng_output_info(void)
{
Evas_Engine_Info_PSL1GHT *info;
printf ("eng_info called\n");
info = calloc(1, sizeof(Evas_Engine_Info_PSL1GHT));
if (!info)
return NULL;
info->magic.magic = rand();
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *info)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_PSL1GHT *in;
Evas_Engine_Info_PSL1GHT *einfo = info;
printf ("eng_info_free called\n");
in = (Evas_Engine_Info_PSL1GHT *)info;
free(in);
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void *
@ -420,8 +402,7 @@ module_open(Evas_Module *em)
func = pfunc;
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_info_setup);
ORD(output_setup);
ORD(canvas_alpha_get);
ORD(output_free);
@ -435,6 +416,8 @@ module_open(Evas_Module *em)
ORD(output_flush);
ORD(output_idle_flush);
func.info_size = sizeof (Evas_Engine_Info_PSL1GHT);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -65,26 +65,12 @@ _output_setup(int width,
/* engine api this module provides */
static void *
eng_output_info(void)
{
Evas_Engine_Info_Software_DDraw *info;
info = calloc(1, sizeof(Evas_Engine_Info_Software_DDraw));
if (!info) return NULL;
info->magic.magic = rand();
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *info)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_Software_DDraw *in;
Evas_Engine_Info_Software_DDraw *einfo = info;
in = (Evas_Engine_Info_Software_DDraw *)info;
free(in);
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void *
@ -136,11 +122,13 @@ module_open(Evas_Module *em)
func = pfunc;
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_info_setup);
ORD(output_setup);
ORD(canvas_alpha_get);
ORD(output_free);
func.info_size = sizeof (Evas_Engine_Info_Software_DDraw);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -71,25 +71,6 @@ _output_setup(int width,
/* engine api this module provides */
static void *
eng_output_info(void)
{
Evas_Engine_Info_Software_Gdi *info;
info = calloc(1, sizeof(Evas_Engine_Info_Software_Gdi));
if (!info) return NULL;
info->magic.magic = rand();
return info;
}
static void
eng_output_info_free(void *info)
{
Evas_Engine_Info_Software_Gdi *in;
in = (Evas_Engine_Info_Software_Gdi *)info;
free(in);
}
static void *
eng_output_setup(void *engine EINA_UNUSED, void *in, unsigned int w, unsigned int h)
{
@ -173,12 +154,12 @@ module_open(Evas_Module *em)
func = pfunc;
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_setup);
ORD(output_update);
ORD(canvas_alpha_get);
ORD(output_free);
func.info_size = sizeof (Evas_Engine_Info_Software_Gdi);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -4659,8 +4659,7 @@ eng_gfx_filter_process(void *data EINA_UNUSED, Evas_Filter_Command *cmd)
static Evas_Func func =
{
NULL, // eng_info
NULL, // eng_info_free
NULL, // eng_info_setup
NULL, // eng_setup
NULL, // eng_update
NULL, // eng_output_free
@ -4852,8 +4851,9 @@ static Evas_Func func =
eng_ector_new,
eng_ector_free,
eng_gfx_filter_supports,
eng_gfx_filter_process
eng_gfx_filter_process,
/* FUTURE software generic calls go here */
0 // sizeof (Info)
};

View File

@ -231,32 +231,18 @@ _symbols(void)
}
/* engine api this module provides */
static void *
eng_output_info(void)
{
Evas_Engine_Info_Software_X11 *info;
if (!(info = calloc(1, sizeof(Evas_Engine_Info_Software_X11))))
return NULL;
info->magic.magic = rand();
info->info.debug = 0;
info->info.alloc_grayscale = 0;
info->info.alloc_colors_max = 216;
info->func.best_visual_get = _best_visual_get;
info->func.best_colormap_get = _best_colormap_get;
info->func.best_depth_get = _best_depth_get;
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(void *info)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_Software_X11 *in;
Evas_Engine_Info_Software_X11 *einfo = info;
in = (Evas_Engine_Info_Software_X11 *)info;
free(in);
einfo->info.debug = 0;
einfo->info.alloc_grayscale = 0;
einfo->info.alloc_colors_max = 216;
einfo->func.best_visual_get = _best_visual_get;
einfo->func.best_colormap_get = _best_colormap_get;
einfo->func.best_depth_get = _best_depth_get;
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void *
@ -590,8 +576,7 @@ module_open(Evas_Module *em)
/* now to override methods */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_info_setup);
ORD(output_setup);
ORD(output_update);
ORD(canvas_alpha_get);
@ -601,6 +586,8 @@ module_open(Evas_Module *em)
ORD(image_native_set);
ORD(image_native_get);
func.info_size = sizeof (Evas_Engine_Info_Software_X11);
_symbols();
/* now advertise out own api */
em->functions = (void *)(&func);

View File

@ -502,28 +502,12 @@ static const EVGL_Interface evgl_funcs =
};
/* engine functions */
static void *
eng_output_info(void)
{
Evas_Engine_Info_Wayland *info;
/* try to allocate space for our engine info */
if (!(info = calloc(1, sizeof(Evas_Engine_Info_Wayland))))
return NULL;
info->magic.magic = rand();
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
return info;
}
static void
eng_output_info_free(Evas *evas EINA_UNUSED, void *info)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_Wayland *inf;
Evas_Engine_Info_Wayland *info = info;
if ((inf = (Evas_Engine_Info_Wayland *)info))
free(inf);
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static Render_Engine_Swap_Mode
@ -1430,8 +1414,7 @@ module_open(Evas_Module *em)
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_info_setup);
ORD(output_setup);
ORD(output_update);
ORD(canvas_alpha_get);
@ -1443,6 +1426,8 @@ module_open(Evas_Module *em)
ORD(image_native_init);
ORD(image_native_shutdown);
func.info_size = sizeof (Evas_Engine_Info_Wayland);
symbols();
/* advertise out which functions we support */

View File

@ -102,35 +102,14 @@ _symbols(void)
}
/* ENGINE API FUNCTIONS WE PROVIDE */
static void *
eng_output_info(void)
{
Evas_Engine_Info_Wayland *einfo;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
/* try to allocate space for new engine info */
if (!(einfo = calloc(1, sizeof(Evas_Engine_Info_Wayland))))
return NULL;
/* fill in engine info */
einfo->magic.magic = rand();
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
/* return allocated engine info */
return einfo;
}
static void
eng_output_info_free(void *info)
eng_output_info_setup(void *info)
{
Evas_Engine_Info_Wayland *einfo;
Evas_Engine_Info_Wayland *einfo = info;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
/* try to free previously allocated engine info */
if ((einfo = (Evas_Engine_Info_Wayland *)info))
free(einfo);
einfo->render_mode = EVAS_RENDER_MODE_BLOCKING;
}
static void *
@ -360,8 +339,7 @@ module_open(Evas_Module *em)
/* override engine specific functions */
#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
ORD(output_info);
ORD(output_info_free);
ORD(output_info_setup);
ORD(output_setup);
ORD(output_update);
ORD(output_free);
@ -371,6 +349,8 @@ module_open(Evas_Module *em)
ORD(image_native_init);
ORD(image_native_shutdown);
func.info_size = sizeof (Evas_Engine_Info_Wayland);
_symbols();
/* advertise our own engine functions */
em->functions = (void *)(&func);