hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=026e767b8690ec171019b516dd5153e2c68e89c6

commit 026e767b8690ec171019b516dd5153e2c68e89c6
Author: ChunEon Park <chuneon.p...@samsung.com>
Date:   Wed Oct 8 15:47:58 2014 +0900

    evas: support anti-alias for gl line drawing.
---
 src/modules/evas/engines/gl_common/evas_gl_common.h  |  2 ++
 src/modules/evas/engines/gl_common/evas_gl_context.c | 18 +++++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h 
b/src/modules/evas/engines/gl_common/evas_gl_common.h
index 94d6c09..272841e 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_common.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_common.h
@@ -491,6 +491,7 @@ struct _Evas_Engine_GL_Context
          int             smooth;
          int             blend;
          int             clip;
+         Eina_Bool       anti_alias : 1;
       } current;
    } state;
    
@@ -537,6 +538,7 @@ struct _Evas_Engine_GL_Context
          Eina_Bool use_texuv3 : 1;
          Eina_Bool use_texa : 1;
          Eina_Bool use_texsam : 1;
+         Eina_Bool anti_alias : 1;
          Evas_GL_Image *im;
          GLuint buffer;
          int buffer_alloc;
diff --git a/src/modules/evas/engines/gl_common/evas_gl_context.c 
b/src/modules/evas/engines/gl_common/evas_gl_context.c
index 872d289..14f3ff1 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_context.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_context.c
@@ -1452,6 +1452,7 @@ evas_gl_common_context_line_push(Evas_Engine_GL_Context 
*gc,
    gc->pipe[pn].shader.ch = ch;
 
    gc->pipe[pn].array.line = 1;
+   gc->pipe[pn].array.anti_alias = gc->dc->anti_alias;
    gc->pipe[pn].array.use_vertex = 1;
    gc->pipe[pn].array.use_color = 1;
    gc->pipe[pn].array.use_texuv = 0;
@@ -1475,6 +1476,7 @@ evas_gl_common_context_line_push(Evas_Engine_GL_Context 
*gc,
 
    shader_array_flush(gc);
    gc->pipe[pn].array.line = 0;
+   gc->pipe[pn].array.anti_alias = 0;
    gc->pipe[pn].array.use_vertex = 0;
    gc->pipe[pn].array.use_color = 0;
    gc->pipe[pn].array.use_texuv = 0;
@@ -2760,7 +2762,8 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
                     }
                }
           }
-        if (gc->pipe[i].shader.render_op != gc->state.current.render_op)
+        if ((gc->pipe[i].shader.render_op != gc->state.current.render_op) ||
+            gc->state.current.anti_alias)
           {
              switch (gc->pipe[i].shader.render_op)
                {
@@ -3054,6 +3057,18 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
 
         if (gc->pipe[i].array.line)
           {
+             if (gc->pipe[i].array.anti_alias)
+               {
+                  glEnable(GL_BLEND);
+                  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+                  glHint(GL_LINE_SMOOTH, GL_NICEST);
+                  glEnable(GL_LINE_SMOOTH);
+               }
+             else
+               {
+                  glDisable(GL_LINE_SMOOTH);
+               }
+
              glDisableVertexAttribArray(SHAD_TEXUV);
              GLERR(__FUNCTION__, __FILE__, __LINE__, "");
              glDisableVertexAttribArray(SHAD_TEXUV2);
@@ -3266,6 +3281,7 @@ shader_array_flush(Evas_Engine_GL_Context *gc)
         gc->state.current.smooth    = gc->pipe[i].shader.smooth;
         gc->state.current.blend     = gc->pipe[i].shader.blend;
         gc->state.current.clip      = gc->pipe[i].shader.clip;
+        gc->state.current.anti_alias = gc->pipe[i].array.anti_alias;
 
         if (gc->pipe[i].array.vertex) free(gc->pipe[i].array.vertex);
         if (gc->pipe[i].array.color) free(gc->pipe[i].array.color);

-- 


Reply via email to