On Tue, 11 Oct 2011 08:14:47 +0200 (CEST) Vincent Torri <vto...@univ-evry.fr> said:
> > > On Mon, 10 Oct 2011, Enlightenment SVN wrote: > > > Log: > > use lround() for map coord rounding to avoid silly things like > > 15.999999999999999998 rounding down to 15... whihc leads to > > sometimes... odd off-by-1 expected results. > > lround is C99 compliant and does not exist on Windows. > > why not using the macro > > #define round(x) (x<0?ceil((x)-0.5):floor((x)+0.5)) because 1. i dont have a manual page for what is NOT supported in windows's dev envs (that's why we have you!). 2. floor and ceil return doubles, not integers. lround returns a long int (long). why not do it that way? less efficient than a single lround call. and technically incorrect. i'm literally trying to solve minuscule rounding issues here and returning a rounded double could still return an inaccurate (by a very tiny margin) double that will still get rounded the wrong way. :( need a call that rounds and returns an integer type (int, long, etc.) not a double or float. > ? > > Vincent > > > > > > > > > Author: raster > > Date: 2011-10-10 23:06:11 -0700 (Mon, 10 Oct 2011) > > New Revision: 63978 > > Trac: http://trac.enlightenment.org/e/changeset/63978 > > > > Modified: > > trunk/evas/src/lib/canvas/evas_map.c > > trunk/evas/src/lib/canvas/evas_object_image.c > > trunk/evas/src/lib/canvas/evas_render.c > > > > Modified: trunk/evas/src/lib/canvas/evas_map.c > > =================================================================== > > --- trunk/evas/src/lib/canvas/evas_map.c 2011-10-11 05:12:06 UTC > > (rev 63977) +++ trunk/evas/src/lib/canvas/evas_map.c 2011-10-11 > > 06:06:11 UTC (rev 63978) @@ -81,10 +81,10 @@ > > > > p = obj->cur.map->points; > > p_end = p + obj->cur.map->count; > > - x1 = p->x; > > - x2 = p->x; > > - y1 = p->y; > > - y2 = p->y; > > + x1 = lround(p->x); > > + x2 = lround(p->x); > > + y1 = lround(p->y); > > + y2 = lround(p->y); > > p++; > > for (; p < p_end; p++) > > { > > > > Modified: trunk/evas/src/lib/canvas/evas_object_image.c > > =================================================================== > > --- trunk/evas/src/lib/canvas/evas_object_image.c 2011-10-11 > > 05:12:06 UTC (rev 63977) +++ > > trunk/evas/src/lib/canvas/evas_object_image.c 2011-10-11 06:06:11 > > UTC (rev 63978) @@ -2,6 +2,7 @@ > > #include <unistd.h> > > #include <stdlib.h> > > #include <sys/mman.h> > > +#include <math.h> > > > > #include "evas_common.h" > > #include "evas_private.h" > > @@ -2887,14 +2888,14 @@ > > // draw geom +x +y > > for (; p < p_end; p++, pt++) > > { > > - pt->x = (p->x + (double)x) * FP1; > > - pt->y = (p->y + (double)y) * FP1; > > - pt->z = (p->z) * FP1; > > + pt->x = (lround(p->x) + x) * FP1; > > + pt->y = (lround(p->y) + y) * FP1; > > + pt->z = (lround(p->z) ) * FP1; > > pt->fx = p->px; > > pt->fy = p->py; > > pt->fz = p->z; > > - pt->u = ((p->u * imagew) / uvw) * FP1; > > - pt->v = ((p->v * imageh) / uvh) * FP1; > > + pt->u = ((lround(p->u) * imagew) / uvw) * FP1; > > + pt->v = ((lround(p->v) * imageh) / uvh) * FP1; > > if (pt->u < 0) pt->u = 0; > > else if (pt->u > (imagew * FP1)) pt->u = (imagew * FP1); > > if (pt->v < 0) pt->v = 0; > > > > Modified: trunk/evas/src/lib/canvas/evas_render.c > > =================================================================== > > --- trunk/evas/src/lib/canvas/evas_render.c 2011-10-11 05:12:06 UTC > > (rev 63977) +++ trunk/evas/src/lib/canvas/evas_render.c 2011-10-11 > > 06:06:11 UTC (rev 63978) @@ -1,5 +1,6 @@ > > #include "evas_common.h" > > #include "evas_private.h" > > +#include <math.h> > > > > // debug rendering > > /* #define REND_DGB 1 */ > > @@ -911,14 +912,14 @@ > > pt = pts; > > for (; p < p_end; p++, pt++) > > { > > - pt->x = (p->x + (double)off_x) * FP1; > > - pt->y = (p->y + (double)off_y) * FP1; > > - pt->z = (p->z) * FP1; > > + pt->x = (lround(p->x) + off_x) * FP1; > > + pt->y = (lround(p->y) + off_y) * FP1; > > + pt->z = (lround(p->z) ) * FP1; > > pt->fx = p->px; > > pt->fy = p->py; > > pt->fz = p->z; > > - pt->u = p->u * FP1; > > - pt->v = p->v * FP1; > > + pt->u = lround(p->u) * FP1; > > + pt->v = lround(p->v) * FP1; > > if (pt->u < 0) pt->u = 0; > > else if (pt->u > (sw * FP1)) pt->u = (sw * FP1); > > if (pt->v < 0) pt->v = 0; > > > > > > ------------------------------------------------------------------------------ > > All the data continuously generated in your IT infrastructure contains a > > definitive record of customers, application performance, security > > threats, fraudulent activity and more. Splunk takes this data and makes > > sense of it. Business sense. IT sense. Common sense. > > http://p.sf.net/sfu/splunk-d2d-oct > > _______________________________________________ > > enlightenment-svn mailing list > > enlightenment-...@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > > > > > > ------------------------------------------------------------------------------ > All the data continuously generated in your IT infrastructure contains a > definitive record of customers, application performance, security > threats, fraudulent activity and more. Splunk takes this data and makes > sense of it. Business sense. IT sense. Common sense. > http://p.sf.net/sfu/splunk-d2d-oct > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel