diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index 8cac669e6f..d713c4abc0 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -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. diff --git a/src/lib/evas/canvas/evas_out.c b/src/lib/evas/canvas/evas_out.c index 48bd5df96d..567ea58dc8 100644 --- a/src/lib/evas/canvas/evas_out.c +++ b/src/lib/evas/canvas/evas_out.c @@ -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); diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 0e71d31369..ba6b752940 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -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 diff --git a/src/modules/evas/engines/buffer/evas_engine.c b/src/modules/evas/engines/buffer/evas_engine.c index 4cff96b18d..821e47d8c8 100644 --- a/src/modules/evas/engines/buffer/evas_engine.c +++ b/src/modules/evas/engines/buffer/evas_engine.c @@ -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; diff --git a/src/modules/evas/engines/drm/evas_engine.c b/src/modules/evas/engines/drm/evas_engine.c index beb4476177..927a17e57b 100644 --- a/src/modules/evas/engines/drm/evas_engine.c +++ b/src/modules/evas/engines/drm/evas_engine.c @@ -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); diff --git a/src/modules/evas/engines/eglfs/evas_engine.c b/src/modules/evas/engines/eglfs/evas_engine.c index 0394571d32..0aa53dbcbc 100644 --- a/src/modules/evas/engines/eglfs/evas_engine.c +++ b/src/modules/evas/engines/eglfs/evas_engine.c @@ -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(); diff --git a/src/modules/evas/engines/fb/evas_engine.c b/src/modules/evas/engines/fb/evas_engine.c index f1c7e95a9f..630118ac62 100644 --- a/src/modules/evas/engines/fb/evas_engine.c +++ b/src/modules/evas/engines/fb/evas_engine.c @@ -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; diff --git a/src/modules/evas/engines/gl_cocoa/evas_engine.c b/src/modules/evas/engines/gl_cocoa/evas_engine.c index bb3ea7e103..500b118938 100644 --- a/src/modules/evas/engines/gl_cocoa/evas_engine.c +++ b/src/modules/evas/engines/gl_cocoa/evas_engine.c @@ -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 */ diff --git a/src/modules/evas/engines/gl_drm/evas_engine.c b/src/modules/evas/engines/gl_drm/evas_engine.c index e636c0e60f..095131618a 100644 --- a/src/modules/evas/engines/gl_drm/evas_engine.c +++ b/src/modules/evas/engines/gl_drm/evas_engine.c @@ -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); diff --git a/src/modules/evas/engines/gl_sdl/evas_engine.c b/src/modules/evas/engines/gl_sdl/evas_engine.c index e7b740869a..940e74b83d 100644 --- a/src/modules/evas/engines/gl_sdl/evas_engine.c +++ b/src/modules/evas/engines/gl_sdl/evas_engine.c @@ -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 */ diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c b/src/modules/evas/engines/gl_x11/evas_engine.c index adf968fcfb..d74ecce4ea 100644 --- a/src/modules/evas/engines/gl_x11/evas_engine.c +++ b/src/modules/evas/engines/gl_x11/evas_engine.c @@ -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); diff --git a/src/modules/evas/engines/psl1ght/evas_engine.c b/src/modules/evas/engines/psl1ght/evas_engine.c index 9b9bef084c..5375fa500e 100644 --- a/src/modules/evas/engines/psl1ght/evas_engine.c +++ b/src/modules/evas/engines/psl1ght/evas_engine.c @@ -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; diff --git a/src/modules/evas/engines/software_ddraw/evas_engine.c b/src/modules/evas/engines/software_ddraw/evas_engine.c index 2d21d9d2f9..bf647cbc9d 100644 --- a/src/modules/evas/engines/software_ddraw/evas_engine.c +++ b/src/modules/evas/engines/software_ddraw/evas_engine.c @@ -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; diff --git a/src/modules/evas/engines/software_gdi/evas_engine.c b/src/modules/evas/engines/software_gdi/evas_engine.c index 5b88b7e0c3..eb17e0e210 100644 --- a/src/modules/evas/engines/software_gdi/evas_engine.c +++ b/src/modules/evas/engines/software_gdi/evas_engine.c @@ -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; diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index baede8f25d..3245f9a371 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -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) }; diff --git a/src/modules/evas/engines/software_x11/evas_engine.c b/src/modules/evas/engines/software_x11/evas_engine.c index 03d6cea3a3..fadb68bc45 100644 --- a/src/modules/evas/engines/software_x11/evas_engine.c +++ b/src/modules/evas/engines/software_x11/evas_engine.c @@ -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); diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c b/src/modules/evas/engines/wayland_egl/evas_engine.c index 4fa6a440a2..16ad004f50 100644 --- a/src/modules/evas/engines/wayland_egl/evas_engine.c +++ b/src/modules/evas/engines/wayland_egl/evas_engine.c @@ -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 */ diff --git a/src/modules/evas/engines/wayland_shm/evas_engine.c b/src/modules/evas/engines/wayland_shm/evas_engine.c index 61bd701fb1..d5bdb6b4eb 100644 --- a/src/modules/evas/engines/wayland_shm/evas_engine.c +++ b/src/modules/evas/engines/wayland_shm/evas_engine.c @@ -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);