evas: mirror partial swap fix in wl egl and move to alloca for rect buf.
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Wed, 5 Jun 2013 09:07:29 +0000 (18:07 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Wed, 5 Jun 2013 09:11:46 +0000 (18:11 +0900)
src/modules/evas/engines/gl_x11/evas_engine.c
src/modules/evas/engines/wayland_egl/evas_engine.c

index 4fb9f06..7312e11 100644 (file)
@@ -1444,15 +1444,14 @@ eng_output_flush(void *data, Evas_Render_Mode render_mode)
      }
    if ((glsym_eglSwapBuffersRegion) && (re->mode != MODE_FULL))
      {
-        EGLint num = 0, *rects = NULL, i;
+        EGLint num = 0, *rects = NULL, i = 0;
         Tilebuf_Rect *r;
         
         // if partial swaps can be done use re->rects
         EINA_INLIST_FOREACH(EINA_INLIST_GET(re->rects), r) num++;
-        if (num > 0) rects = malloc(sizeof(EGLint) * 4 * num);
-        if (rects)
+        if (num > 0)
           {
-             i = 0;
+             rects = alloca(sizeof(EGLint) * 4 * num);
              EINA_INLIST_FOREACH(EINA_INLIST_GET(re->rects), r)
                {
                   int gw, gh;
@@ -1497,7 +1496,6 @@ eng_output_flush(void *data, Evas_Render_Mode render_mode)
              glsym_eglSwapBuffersRegion(re->win->egl_disp,
                                         re->win->egl_surface[0],
                                         num, rects);
-             free(rects);
           }
      }
    else
index feafa14..21a87b9 100644 (file)
@@ -1197,9 +1197,9 @@ eng_output_flush(void *data, Evas_Render_Mode render_mode)
         
         // if partial swaps can be done use re->rects
         EINA_INLIST_FOREACH(EINA_INLIST_GET(re->rects), r) num++;
-        if (num > 0) rects = malloc(sizeof(EGLint) * 4 * num);
-        if (rects)
+        if (num > 0)
           {
+             rects = alloca(sizeof(EGLint) * 4 * num);
              EINA_INLIST_FOREACH(EINA_INLIST_GET(re->rects), r)
                {
                   int gw, gh;
@@ -1216,7 +1216,7 @@ eng_output_flush(void *data, Evas_Render_Mode render_mode)
                        break;
                      case 90:
                        rects[i + 0] = r->y;
-                       rects[i + 1] = gh - (r->x + r->w);
+                       rects[i + 1] = gw - (r->x + r->w);
                        rects[i + 2] = r->h;
                        rects[i + 3] = r->w;
                        break;
@@ -1243,7 +1243,6 @@ eng_output_flush(void *data, Evas_Render_Mode render_mode)
                }
              glsym_eglSwapBuffersRegion(re->win->egl_disp,
                                         re->win->egl_surface[0], num, rects);
-             free(rects);
           }
      }
    else