Added EVAS_GL_LINE_NO_OFFSET_HACK evn var control to handle
authorSung Park <sungwoo@gmail.com>
Fri, 7 Dec 2012 08:28:42 +0000 (08:28 +0000)
committerSung Park <sungwoo@gmail.com>
Fri, 7 Dec 2012 08:28:42 +0000 (08:28 +0000)
line coordinate fiddling in gl line drawing code.  This fiddling
caused issues on some GPU drivers on ARM target.

SVN revision: 80417

ChangeLog
src/modules/evas/engines/gl_common/evas_gl_line.c

index b2a72a0..814f1e2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-12-07 Sung W. Park (sung_)
+
+       * Added EVAS_GL_LINE_NO_OFFSET_HACK to turn off the line coordinate
+          fiddling that was originally in the gl backend code. The offset 
+          fiddling caused issues with some ARM target GPU drivers.
+
 2012-12-05  Gustavo Sverzut Barbieri (k-s)
 
        * Removed DirectFB support (both ecore_directfb, evas and ecore_evas).
index c13fa25..5848da6 100644 (file)
@@ -1,11 +1,18 @@
 #include "evas_gl_private.h"
 
+
 void
 evas_gl_common_line_draw(Evas_Engine_GL_Context *gc, int x1, int y1, int x2, int y2)
 {
    RGBA_Draw_Context *dc;
    int r, g, b, a;
    int c, cx, cy, cw, ch;
+   static int offset_hack = -1;
+
+   if (offset_hack == -1) {
+        if (getenv("EVAS_GL_LINE_NO_OFFSET_HACK")) offset_hack = 0;
+        else offset_hack = 1;
+   }
 
    dc = gc->dc;
    if (dc->mul.use)
@@ -27,20 +34,25 @@ evas_gl_common_line_draw(Evas_Engine_GL_Context *gc, int x1, int y1, int x2, int
    cx = gc->dc->clip.x; cy = gc->dc->clip.y;
    cw = gc->dc->clip.w; ch = gc->dc->clip.h;
 
-   //Increment pixels since the gl line origin position is slightly different
-   if (x1 == x2)
+   if (offset_hack)
      {
-        if (gc->rot == 0)
-          x1++;
-     }
+        /* Increment pixels since the gl line origin position is slightly different
+           on some platform.  Carsten did this hack.. doesn't remember exactly why but
+           it works most drivers. */
+        if (x1 == x2)
+          {
+             if (gc->rot == 0)
+                x1++;
+          }
 
-   if (y1 == y2)
-     {
-        if ((gc->rot == 90) || (gc->rot == 180))
-          y1++;
-     }
+        if (y1 == y2)
+          {
+             if ((gc->rot == 90) || (gc->rot == 180))
+                y1++;
+          }
 
-   x2++; y2++;
+        x2++; y2++;
+     }
 
    evas_gl_common_context_line_push(gc, x1, y1, x2, y2,
                                     c, cx, cy, cw, ch,