jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=3889feca24ad3dba2aead16261a6b8dde0687b57

commit 3889feca24ad3dba2aead16261a6b8dde0687b57
Author: Jean-Philippe Andre <[email protected]>
Date:   Wed Oct 2 15:07:25 2013 +0900

    evas/cserve2: Implement support for GL engine
    
    Simply call the appropriate cache2 functions when possible
    and check for usage of cache2 whenever an evas_cache_ function
    is called.
    
    This effectively adds cserve2 image (data) load support for the
    GL engines. Fonts were already working out-of-the-box.
---
 src/modules/evas/engines/gl_common/evas_gl_image.c | 147 ++++++++++++++++++---
 1 file changed, 132 insertions(+), 15 deletions(-)

diff --git a/src/modules/evas/engines/gl_common/evas_gl_image.c 
b/src/modules/evas/engines/gl_common/evas_gl_image.c
index 2317790..36b40aa 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_image.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_image.c
@@ -1,5 +1,9 @@
 #include "evas_gl_private.h"
 
+#ifdef EVAS_CSERVE2
+#include "evas_cs2_private.h"
+#endif
+
 void
 evas_gl_common_image_alloc_ensure(Evas_GL_Image *im)
 {
@@ -16,7 +20,15 @@ evas_gl_common_image_all_unload(Evas_Engine_GL_Context *gc)
 
    EINA_LIST_FOREACH(gc->shared->images, l, im)
      {
-        if (im->im) evas_cache_image_unload_data(&im->im->cache_entry);
+        if (im->im)
+          {
+#ifdef EVAS_CSERVE2
+             if (evas_cache2_image_cached(&im->im->cache_entry))
+               evas_cache2_image_unload_data(&im->im->cache_entry);
+             else
+#endif
+               evas_cache_image_unload_data(&im->im->cache_entry);
+          }
         if (im->tex)
           {
              if (!im->tex->pt->dyn.img)
@@ -141,7 +153,12 @@ _evas_gl_common_image(Evas_Engine_GL_Context *gc, 
RGBA_Image *im_im, Evas_Image_
    im = calloc(1, sizeof(Evas_GL_Image));
    if (!im)
      {
-        evas_cache_image_drop(&(im_im->cache_entry));
+#ifdef EVAS_CSERVE2
+        if (evas_cache2_image_cached(&im_im->cache_entry))
+          evas_cache2_image_close(&(im_im->cache_entry));
+        else
+#endif
+          evas_cache_image_drop(&(im_im->cache_entry));
        *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
        return NULL;
      }
@@ -163,6 +180,26 @@ evas_gl_common_image_load(Evas_Engine_GL_Context *gc, 
const char *file, const ch
 {
    RGBA_Image *im_im;
 
+#ifdef EVAS_CSERVE2
+   if (evas_cserve2_use_get())
+     {
+        im_im = (RGBA_Image *) evas_cache2_image_open
+          (evas_common_image_cache2_get(), file, key, lo, error);
+        if (im_im)
+          {
+             *error = evas_cache2_image_open_wait(&im_im->cache_entry);
+             if ((*error != EVAS_LOAD_ERROR_NONE)
+                 && im_im->cache_entry.animated.animated)
+               {
+                  evas_cache2_image_close(&im_im->cache_entry);
+                  im_im = NULL;
+               }
+             else
+               return _evas_gl_common_image(gc, im_im, lo, error);
+          }
+     }
+#endif
+
    im_im = evas_common_load_image_from_file(file, key, lo, error);
    if (!im_im) return NULL;
 
@@ -174,6 +211,26 @@ evas_gl_common_image_mmap(Evas_Engine_GL_Context *gc, 
Eina_File *f, const char *
 {
    RGBA_Image *im_im;
 
+#ifdef EVAS_CSERVE2
+   if (evas_cserve2_use_get() && !eina_file_virtual(f))
+     {
+        im_im = (RGBA_Image *) evas_cache2_image_open
+          (evas_common_image_cache2_get(), eina_file_filename_get(f), key, lo, 
error);
+        if (im_im)
+          {
+             *error = evas_cache2_image_open_wait(&im_im->cache_entry);
+             if ((*error != EVAS_LOAD_ERROR_NONE)
+                 && im_im->cache_entry.animated.animated)
+               {
+                  evas_cache2_image_close(&im_im->cache_entry);
+                  im_im = NULL;
+               }
+             else
+               return _evas_gl_common_image(gc, im_im, lo, error);
+          }
+     }
+#endif
+
    im_im = evas_common_load_image_from_mmap(f, key, lo, error);
    if (!im_im) return NULL;
 
@@ -341,7 +398,12 @@ evas_gl_common_image_alpha_set(Evas_GL_Image *im, int 
alpha)
    im->alpha = alpha;
    if (!im->im) return im;
    evas_gl_common_image_alloc_ensure(im);
-   evas_cache_image_load_data(&im->im->cache_entry);
+#ifdef EVAS_CSERVE2
+   if (evas_cache2_image_cached(&im->im->cache_entry))
+     evas_cache2_image_load_data(&im->im->cache_entry);
+   else
+#endif
+     evas_cache_image_load_data(&im->im->cache_entry);
    im->im->cache_entry.flags.alpha = alpha ? 1 : 0;
 
    if (im->tex) evas_gl_common_texture_free(im->tex, EINA_TRUE);
@@ -376,7 +438,12 @@ evas_gl_common_image_native_enable(Evas_GL_Image *im)
      }
    if (im->im)
      {
-        evas_cache_image_drop(&im->im->cache_entry);
+#ifdef EVAS_CSERVE2
+        if (evas_cache2_image_cached(&im->im->cache_entry))
+          evas_cache2_image_close(&im->im->cache_entry);
+        else
+#endif
+          evas_cache_image_drop(&im->im->cache_entry);
         im->im = NULL;
      }
    if (im->tex)
@@ -395,7 +462,12 @@ evas_gl_common_image_native_disable(Evas_GL_Image *im)
 {
    if (im->im)
      {
-        evas_cache_image_drop(&im->im->cache_entry);
+#ifdef EVAS_CSERVE2
+        if (!evas_cache2_image_cached(&im->im->cache_entry))
+          evas_cache2_image_close(&im->im->cache_entry);
+        else
+#endif
+          evas_cache_image_drop(&im->im->cache_entry);
         im->im = NULL;
      }
    if (im->tex)
@@ -451,7 +523,12 @@ evas_gl_common_image_content_hint_set(Evas_GL_Image *im, 
int hint)
           }
         if (im->im)
           {
-             evas_cache_image_drop(&im->im->cache_entry);
+#ifdef EVAS_CSERVE2
+             if (evas_cache2_image_cached(&im->im->cache_entry))
+               evas_cache2_image_close(&im->im->cache_entry);
+             else
+#endif
+               evas_cache_image_drop(&im->im->cache_entry);
              im->im = NULL;
           }
         if (im->tex)
@@ -466,7 +543,12 @@ evas_gl_common_image_content_hint_set(Evas_GL_Image *im, 
int hint)
      {
         if (im->im)
           {
-             evas_cache_image_drop(&im->im->cache_entry);
+#ifdef EVAS_CSERVE2
+             if (evas_cache2_image_cached(&im->im->cache_entry))
+               evas_cache2_image_close(&im->im->cache_entry);
+             else
+#endif
+               evas_cache_image_drop(&im->im->cache_entry);
              im->im = NULL;
           }
         if (im->tex)
@@ -510,7 +592,15 @@ evas_gl_common_image_free(Evas_GL_Image *im)
      {
         if (_evas_gl_image_cache_add(im)) return;
      }
-   if (im->im) evas_cache_image_drop(&im->im->cache_entry);
+   if (im->im)
+     {
+#ifdef EVAS_CSERVE2
+        if (evas_cache2_image_cached(&im->im->cache_entry))
+          evas_cache2_image_close(&im->im->cache_entry);
+        else
+#endif
+          evas_cache_image_drop(&im->im->cache_entry);
+     }
    if (im->tex) evas_gl_common_texture_free(im->tex, EINA_TRUE);
 
    free(im);
@@ -549,7 +639,12 @@ evas_gl_common_image_dirty(Evas_GL_Image *im, unsigned int 
x, unsigned int y, un
    if (im->im)
      {
         evas_gl_common_image_alloc_ensure(im);
-        im->im = (RGBA_Image *)evas_cache_image_dirty(&im->im->cache_entry, x, 
y, w, h);
+#ifdef EVAS_CSERVE2
+        if (evas_cache2_image_cached(&im->im->cache_entry))
+          im->im = (RGBA_Image *)evas_cache2_image_dirty(&im->im->cache_entry, 
x, y, w, h);
+        else
+#endif
+          im->im = (RGBA_Image *)evas_cache_image_dirty(&im->im->cache_entry, 
x, y, w, h);
      }
    im->dirty = 1;
 }
@@ -588,16 +683,38 @@ evas_gl_common_image_update(Evas_Engine_GL_Context *gc, 
Evas_GL_Image *im)
          if ((im->tex) &&
              ((im->dirty) || (ie->animated.animated) || 
(ie->flags.updated_data)))
           {
-             evas_cache_image_load_data(&im->im->cache_entry);
-             evas_gl_common_texture_update(im->tex, im->im);
-             evas_cache_image_unload_data(&im->im->cache_entry);
+#ifdef EVAS_CSERVE2
+              if (evas_cache2_image_cached(&im->im->cache_entry))
+                {
+                   evas_cache2_image_load_data(&im->im->cache_entry);
+                   evas_gl_common_texture_update(im->tex, im->im);
+                   evas_cache2_image_unload_data(&im->im->cache_entry);
+                }
+              else
+#endif
+                {
+                   evas_cache_image_load_data(&im->im->cache_entry);
+                   evas_gl_common_texture_update(im->tex, im->im);
+                   evas_cache_image_unload_data(&im->im->cache_entry);
+                }
              ie->flags.updated_data = 0;
           }
        if (!im->tex)
           {
-             evas_cache_image_load_data(&im->im->cache_entry);
-             im->tex = evas_gl_common_texture_new(gc, im->im);
-             evas_cache_image_unload_data(&im->im->cache_entry);
+#ifdef EVAS_CSERVE2
+             if (evas_cache2_image_cached(&im->im->cache_entry))
+               {
+                  evas_cache2_image_load_data(&im->im->cache_entry);
+                  im->tex = evas_gl_common_texture_new(gc, im->im);
+                  evas_cache2_image_unload_data(&im->im->cache_entry);
+               }
+             else
+#endif
+               {
+                  evas_cache_image_load_data(&im->im->cache_entry);
+                  im->tex = evas_gl_common_texture_new(gc, im->im);
+                  evas_cache_image_unload_data(&im->im->cache_entry);
+               }
           }
         im->dirty = 0;
         if (!im->tex) return;

-- 


Reply via email to