From dbcdaa6b68a06468f2e32699f593aeb7a7a09f44 Mon Sep 17 00:00:00 2001 From: Sung Park Date: Fri, 7 Dec 2012 08:28:42 +0000 Subject: [PATCH] Added EVAS_GL_LINE_NO_OFFSET_HACK evn var control to handle line coordinate fiddling in gl line drawing code. This fiddling caused issues on some GPU drivers on ARM target. SVN revision: 80417 --- ChangeLog | 6 ++++ .../evas/engines/gl_common/evas_gl_line.c | 34 +++++++++++++------ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index b2a72a0d3c..814f1e2c30 100644 --- 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). diff --git a/src/modules/evas/engines/gl_common/evas_gl_line.c b/src/modules/evas/engines/gl_common/evas_gl_line.c index c13fa255a5..5848da6ee6 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_line.c +++ b/src/modules/evas/engines/gl_common/evas_gl_line.c @@ -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,