evas: factorize call to info and info_free.
authorCedric BAIL <cedric@osg.samsung.com>
Fri, 25 Aug 2017 17:48:13 +0000 (10:48 -0700)
committerCedric BAIL <cedric@osg.samsung.com>
Fri, 25 Aug 2017 17:48:13 +0000 (10:48 -0700)
18 files changed:
src/lib/evas/canvas/evas_main.c
src/lib/evas/canvas/evas_out.c
src/lib/evas/include/evas_private.h
src/modules/evas/engines/buffer/evas_engine.c
src/modules/evas/engines/drm/evas_engine.c
src/modules/evas/engines/eglfs/evas_engine.c
src/modules/evas/engines/fb/evas_engine.c
src/modules/evas/engines/gl_cocoa/evas_engine.c
src/modules/evas/engines/gl_drm/evas_engine.c
src/modules/evas/engines/gl_sdl/evas_engine.c
src/modules/evas/engines/gl_x11/evas_engine.c
src/modules/evas/engines/psl1ght/evas_engine.c
src/modules/evas/engines/software_ddraw/evas_engine.c
src/modules/evas/engines/software_gdi/evas_engine.c
src/modules/evas/engines/software_generic/evas_engine.c
src/modules/evas/engines/software_x11/evas_engine.c
src/modules/evas/engines/wayland_egl/evas_engine.c
src/modules/evas/engines/wayland_shm/evas_engine.c

index 8cac669..d713c4a 100644 (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.
index 48bd5df..567ea58 100644 (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);
 
index 0e71d31..ba6b752 100644 (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
index 4cff96b..821e47d 100644 (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;
index beb4476..927a17e 100644 (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);
 
index 0394571..0aa53db 100644 (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();
index f1c7e95..630118a 100644 (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;
index bb3ea7e..500b118 100644 (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 */
index e636c0e..0951316 100644 (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);
index e7b7408..940e74b 100644 (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 */
index adf968f..d74ecce 100644 (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);
 
index 9b9bef0..5375fa5 100644 (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;
index 2d21d9d..bf647cb 100644 (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;
index 5b88b7e..eb17e0e 100644 (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;
index baede8f..3245f9a 100644 (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)
 };
 
 
index 03d6cea..fadb68b 100644 (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;
-
-   in = (Evas_Engine_Info_Software_X11 *)info;
-   free(in);
+   Evas_Engine_Info_Software_X11 *einfo = info;
+
+   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);
index 4fa6a44..16ad004 100644 (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 */
index 61bd701..d5bdb6b 100644 (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);