raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=622277c82ab699c2640b24128965e64fd79caece

commit 622277c82ab699c2640b24128965e64fd79caece
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Tue Nov 15 14:42:47 2016 +0900

    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 +++++++++++++
 src/modules/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 398109c..68b1b52 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 09cc24b..dcd66f7 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 0ea4cf2..674c93e 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,

-- 


Reply via email to