git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixes in swfstrings
[swftools.git]
/
lib
/
gfxpoly
/
convert.c
diff --git
a/lib/gfxpoly/convert.c
b/lib/gfxpoly/convert.c
index
64cef43
..
dae58b6
100644
(file)
--- a/
lib/gfxpoly/convert.c
+++ b/
lib/gfxpoly/convert.c
@@
-12,12
+12,13
@@
static inline int32_t convert_coord(double x, double z)
{
static inline int32_t convert_coord(double x, double z)
{
- /* we clamp to 31 bit instead of 32 bit because we use
- a (x1-x2) shortcut when comparing coordinates
+ /* we clamp to 26 bit because:
+ a) we use a (x1-x2) shortcut when comparing coordinates
+ b) we need to be able to multiply two coordinates and store them in a double w/o loss of precision
*/
x *= z;
*/
x *= z;
- if(x < -0x40000000) x = -0x40000000;
- if(x > 0x3fffffff) x = 0x3fffffff;
+ if(x < -0x2000000) x = -0x2000000;
+ if(x > 0x1ffffff) x = 0x1ffffff;
return ceil(x);
}
return ceil(x);
}
@@
-446,6
+447,9
@@
gfxline_t*gfxline_from_gfxpoly(gfxpoly_t*poly)
pos = stroke->num_points-1;
incr = -1;
}
pos = stroke->num_points-1;
incr = -1;
}
+ /* TODO: keeping the up/down order intact increases the polygon size
+ considerably. If this is going to be an even/odd polygon,
+ we could ignore it and save some space */
if(last.x != stroke->points[pos].x || last.y != stroke->points[pos].y) {
l[count].x = stroke->points[pos].x * poly->gridsize;
l[count].y = stroke->points[pos].y * poly->gridsize;
if(last.x != stroke->points[pos].x || last.y != stroke->points[pos].y) {
l[count].x = stroke->points[pos].x * poly->gridsize;
l[count].y = stroke->points[pos].y * poly->gridsize;