From 1b89a7ac5f1340149f57b82d1662d40f30ca5d79 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 16 Jan 2011 07:49:49 +0000 Subject: [PATCH] change map points to use double and floats to reduce perspective correction adjustment seams in gl engine. almost all gone. SVN revision: 56180 --- legacy/evas/src/lib/canvas/evas_map.c | 42 ++++++++----------- .../evas/src/lib/canvas/evas_object_image.c | 7 +++- legacy/evas/src/lib/canvas/evas_render.c | 7 +++- legacy/evas/src/lib/include/evas_common.h | 3 +- legacy/evas/src/lib/include/evas_private.h | 1 + .../engines/gl_common/evas_gl_context.c | 6 +-- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_map.c b/legacy/evas/src/lib/canvas/evas_map.c index d9e331e5f8..42974ef90d 100644 --- a/legacy/evas/src/lib/canvas/evas_map.c +++ b/legacy/evas/src/lib/canvas/evas_map.c @@ -840,7 +840,8 @@ static inline void _evas_map_util_points_populate(Evas_Map *m, const Evas_Coord x, const Evas_Coord y, const Evas_Coord w, const Evas_Coord h, const Evas_Coord z) { Evas_Map_Point *p = m->points; - + int i; + p[0].x = x; p[0].y = y; p[0].z = z; @@ -864,15 +865,12 @@ _evas_map_util_points_populate(Evas_Map *m, const Evas_Coord x, const Evas_Coord p[3].z = z; p[3].u = 0.0; p[3].v = h; - - p[0].px = p[0].x; - p[0].py = p[0].y; - p[1].px = p[1].x; - p[1].py = p[1].y; - p[2].px = p[2].x; - p[2].py = p[2].y; - p[3].px = p[3].x; - p[3].py = p[3].y; + + for (i = 0; i < 4; i++) + { + p[i].px = p[i].x; + p[i].py = p[i].y; + } } /** @@ -1052,7 +1050,7 @@ evas_map_util_rotate(Evas_Map *m, double degrees, Evas_Coord cx, Evas_Coord cy) for (; p < p_end; p++) { - Evas_Coord x, y, xx, yy; + double x, y, xx, yy; x = p->x - cx; y = p->y - cy; @@ -1062,10 +1060,8 @@ evas_map_util_rotate(Evas_Map *m, double degrees, Evas_Coord cx, Evas_Coord cy) x = xx + (y * cos(r + (M_PI / 2.0))); y = yy + (y * sin(r + (M_PI / 2.0))); - p->x = x + cx; - p->y = y + cy; - p->px = p->x; - p->py = p->y; + p->px = p->x = x + cx; + p->py = p->y = y + cy; } } @@ -1098,7 +1094,7 @@ evas_map_util_zoom(Evas_Map *m, double zoomx, double zoomy, Evas_Coord cx, Evas_ for (; p < p_end; p++) { - Evas_Coord x, y; + double x, y; x = p->x - cx; y = p->y - cy; @@ -1106,10 +1102,8 @@ evas_map_util_zoom(Evas_Map *m, double zoomx, double zoomy, Evas_Coord cx, Evas_ x = (((double)x) * zoomx); y = (((double)y) * zoomy); - p->x = x + cx; - p->y = y + cy; - p->px = p->x; - p->py = p->y; + p->px = p->x = x + cx; + p->py = p->y = y + cy; } } @@ -1176,11 +1170,9 @@ evas_map_util_3d_rotate(Evas_Map *m, double dx, double dy, double dz, y = yy + (y * sin(rx + M_PI_2)); } - p->x = x + cx; - p->y = y + cy; + p->px = p->x = x + cx; + p->py = p->y = y + cy; p->z = z + cz; - p->px = p->x; - p->py = p->y; } } @@ -1321,7 +1313,7 @@ evas_map_util_3d_perspective(Evas_Map *m, m->persp.foc = foc; for (; p < p_end; p++) { - Evas_Coord x, y, zz; + double x, y, zz; if (foc > 0) { diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index 029b7eff3e..188ac5df0c 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -2472,8 +2472,11 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su pt->x = (p->x + x) << FP; pt->y = (p->y + y) << FP; pt->z = (p->z) << FP; - pt->x3 = p->px << FP; - pt->y3 = p->py << FP; +// pt->x3 = p->px << FP; +// pt->y3 = p->py << FP; + pt->fx = p->px; + pt->fy = p->py; + pt->fz = p->z; pt->u = p->u * FP1; pt->v = p->v * FP1; pt->col = ARGB_JOIN(p->a, p->r, p->g, p->b); diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index 34a55738ff..13affd988b 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -681,8 +681,11 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, pt->x = (p->x + off_x) << FP; pt->y = (p->y + off_y) << FP; pt->z = (p->z) << FP; - pt->x3 = p->px << FP; - pt->y3 = p->py << FP; +// pt->x3 = p->px << FP; +// pt->y3 = p->py << FP; + pt->fx = p->px; + pt->fy = p->py; + pt->fz = p->z; pt->u = p->u * FP1; pt->v = p->v * FP1; pt->col = ARGB_JOIN(p->a, p->r, p->g, p->b); diff --git a/legacy/evas/src/lib/include/evas_common.h b/legacy/evas/src/lib/include/evas_common.h index 707ab0a7d6..bd9b44fd49 100644 --- a/legacy/evas/src/lib/include/evas_common.h +++ b/legacy/evas/src/lib/include/evas_common.h @@ -795,7 +795,8 @@ struct _RGBA_Polygon_Point struct _RGBA_Map_Point { FPc x, y; // x, y screenspace - FPc x3, y3; // x, y 3d space + float fx, fy, fz; // x, y, z in floats +// FPc x3, y3; // x, y 3d space FPc z; // z in world space. optional FPc u, v; // u, v in tex coords DATA32 col; // color at this point diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 3984c760f2..eabe7051c7 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -359,6 +359,7 @@ struct _Evas_Size_Hints struct _Evas_Map_Point { Evas_Coord x, y, z, px, py; + double fx, fy, fz, fpx, fpy; double u, v; unsigned char r, g, b, a; }; diff --git a/legacy/evas/src/modules/engines/gl_common/evas_gl_context.c b/legacy/evas/src/modules/engines/gl_common/evas_gl_context.c index b0468415dc..ac9e9ebb28 100644 --- a/legacy/evas/src/modules/engines/gl_common/evas_gl_context.c +++ b/legacy/evas/src/modules/engines/gl_common/evas_gl_context.c @@ -2237,9 +2237,9 @@ again: else { PUSH_VERTEX(pn, - (p[points[i]].x3 >> FP) + gc->shared->ax, - (p[points[i]].y3 >> FP) + gc->shared->ay, - (p[points[i]].z >> FP) + (p[points[i]].fx) + gc->shared->ax, + (p[points[i]].fy) + gc->shared->ay, + (p[points[i]].fz) + (gc->shared->foc - gc->shared->z0)); } PUSH_TEXUV(pn,