change map points to use double and floats to reduce perspective

correction adjustment seams in gl engine. almost all gone.



SVN revision: 56180
This commit is contained in:
Carsten Haitzler 2011-01-16 07:49:49 +00:00
parent 1a857abf6d
commit 1b89a7ac5f
6 changed files with 33 additions and 33 deletions

View File

@ -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)
{

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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;
};

View File

@ -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,