From 622277c82ab699c2640b24128965e64fd79caece Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 15 Nov 2016 14:42:47 +0900 Subject: [PATCH] evas - add engine api to get a specific fbo/surf that wont be scaled this is to allow gl to specifically use an fbo as an atlas for these kinds of buffers --- src/lib/evas/include/evas_private.h | 2 ++ src/modules/evas/engines/gl_generic/evas_engine.c | 13 +++++++++++++ .../evas/engines/software_generic/evas_engine.c | 11 +++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 398109cfd9..68b1b52a24 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1390,6 +1390,8 @@ struct _Evas_Func void (*image_prepare) (void *data, void *image); + void *(*image_surface_noscale_new) (void *data, int w, int h, int alpha); + int (*image_native_init) (void *data, Evas_Native_Surface_Type type); void (*image_native_shutdown) (void *data, Evas_Native_Surface_Type type); void *(*image_native_set) (void *data, void *image, void *native); diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 09cc24bc38..dcd66f79ad 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -3098,6 +3098,18 @@ eng_image_prepare(void *engdata EINA_UNUSED, void *image) evas_gl_common_image_update(im->gc, im); } +static void * +eng_image_surface_noscale_new(void *engdata, int w, int h, int alpha) +{ + Evas_Engine_GL_Context *gl_context; + Render_Engine_GL_Generic *re = engdata; + + re->window_use(re->software.ob); + gl_context = re->window_gl_context_get(re->software.ob); + // XXX: FIXME: need a special surface new func that can use an atlas + return evas_gl_common_image_surface_new(gl_context, w, h, alpha); +} + static int module_open(Evas_Module *em) @@ -3185,6 +3197,7 @@ module_open(Evas_Module *em) ORD(image_data_slice_add); ORD(image_prepare); + ORD(image_surface_noscale_new); ORD(font_cache_flush); ORD(font_cache_set); diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 0ea4cf2a3e..674c93eac9 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -415,6 +415,9 @@ struct _Evas_Thread_Command_Ector_Surface int x, y; }; +// declare here as it is re-used +static void *eng_image_map_surface_new(void *data, int w, int h, int alpha); + Eina_Mempool *_mp_command_rect = NULL; Eina_Mempool *_mp_command_line = NULL; Eina_Mempool *_mp_command_polygon = NULL; @@ -1945,6 +1948,13 @@ eng_image_prepare(void *engdata EINA_UNUSED, void *image EINA_UNUSED) // some thread jobs for loading in the bg. } +static void * +eng_image_surface_noscale_new(void *engdata, int w, int h, int alpha) +{ + // simply call the map surface new as all we need is a basic buffer + return eng_image_map_surface_new(engdata, w, h, alpha); +} + static void _image_flip_horizontal(DATA32 *pixels_out, const DATA32 *pixels_in, int iw, int ih) @@ -4658,6 +4668,7 @@ static Evas_Func func = eng_image_data_maps_get, eng_image_data_slice_add, eng_image_prepare, + eng_image_surface_noscale_new, eng_image_native_init, eng_image_native_shutdown, eng_image_native_set,