evas/gl: improve the rendering quality.

To avoid texture bleeding in the texture atlas,
we adjust texture uv point as much as a half uv point.
Especially, this improves the rendering quality when the image has the border
area.

Unless apply this patch,
You might find the rendering result is different with software backened,
if the image has the borders.

In the software backened,
the border line was clear but the gl wasn't.
because the border line was interpolated so the rendering result was not the one we expected.

@fix
This commit is contained in:
ChunEon Park 2014-06-27 21:29:24 +09:00
parent c52e63ec87
commit 5e18223f67
1 changed files with 13 additions and 0 deletions

View File

@ -1857,6 +1857,19 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
ty2 = ((double)(offsety) + sy + sh) / (double)pt->h;
}
/* To avoid texture bleeding in the texture atlas,
we adjust texture uv point as much as a half uv point.
Especially, This improves the rendering quality when the image has the
border area. */
if (smooth)
{
GLfloat txhu, txhv; //texture uv half point
txhu = (0.5f * (tx2 - tx1)) / (GLfloat) sw;
txhv = (0.5f * (ty2 - ty1)) / (GLfloat) sh;
tx1 += txhu; tx2 -= txhu;
ty1 += txhv; ty2 -= txhv;
}
PUSH_VERTEX(pn, x , y , 0);
PUSH_VERTEX(pn, x + w, y , 0);
PUSH_VERTEX(pn, x , y + h, 0);