fix valgrind complaint - indeed corner case.

SVN revision: 49414
This commit is contained in:
Carsten Haitzler 2010-06-03 14:02:46 +00:00
parent eb4b780754
commit 3a5502362e
3 changed files with 32 additions and 15 deletions

View File

@ -8,7 +8,7 @@
for (y = ystart; y <= yend; y++) for (y = ystart; y <= yend; y++)
{ {
int x, w, ww; int x, w, ww;
FPc u, v, ud, vd, dv; FPc u, v, ud, vd, dv, ue, ve;
DATA32 *d, *s; DATA32 *d, *s;
#ifdef COLMUL #ifdef COLMUL
FPc cv, cd, cc; // col FPc cv, cd, cc; // col
@ -39,9 +39,19 @@
ww = w; ww = w;
u = span->u[0] << FPI; u = span->u[0] << FPI;
if (u < 0) u = 0;
else if (u >= swp) u = swp - 1;
v = span->v[0] << FPI; v = span->v[0] << FPI;
ud = ((span->u[1] << FPI) - u) / w; if (v < 0) v = 0;
vd = ((span->v[1] << FPI) - v) / w; else if (v >= shp) v = shp - 1;
ue = span->u[1] << FPI;
if (ue < 0) ue = 0;
else if (ue >= swp) ue = swp - 1;
ve = span->v[1] << FPI;
if (ve < 0) ve = 0;
else if (ve >= shp) ve = shp - 1;
ud = (ue - u) / w;
vd = (ve - v) / w;
tl = (long long)ud * (w << FP); tl = (long long)ud * (w << FP);
tl = tl / dv; tl = tl / dv;
ud = tl; ud = tl;
@ -113,7 +123,7 @@
for (y = ystart; y <= yend; y++) for (y = ystart; y <= yend; y++)
{ {
int x, w, ww; int x, w, ww;
FPc u, v, ud, vd; FPc u, v, ud, vd, ue, ve;
DATA32 *d, *s; DATA32 *d, *s;
#ifdef COLMUL #ifdef COLMUL
FPc cv, cd, cc; // col FPc cv, cd, cc; // col
@ -135,12 +145,19 @@
if (w <= 0) continue; if (w <= 0) continue;
ww = w; ww = w;
u = span->u[0] << FPI; u = span->u[0] << FPI;
if (u < 0) u = 0;
else if (u >= swp) u = swp - 1;
v = span->v[0] << FPI; v = span->v[0] << FPI;
ud = ((span->u[1] << FPI) - u) / w; if (v < 0) v = 0;
vd = ((span->v[1] << FPI) - v) / w; else if (v >= shp) v = shp - 1;
if (ud < 0) u -= 1; ue = span->u[1] << FPI;
if (vd < 0) v -= 1; if (ue < 0) ue = 0;
else if (ue >= swp) ue = swp - 1;
ve = span->v[1] << FPI;
if (ve < 0) ve = 0;
else if (ve >= shp) ve = shp - 1;
ud = (ue - u) / w;
vd = (ve - v) / w;
if (direct) if (direct)
d = dst->image.data + (y * dst->cache_entry.w) + x; d = dst->image.data + (y * dst->cache_entry.w) + x;
else else

View File

@ -106,7 +106,7 @@ FUNC_NAME(RGBA_Image *src, RGBA_Image *dst,
func = evas_common_gfx_func_composite_pixel_span_get(src, dst, cw, dc->render_op); func = evas_common_gfx_func_composite_pixel_span_get(src, dst, cw, dc->render_op);
src->cache_entry.flags.alpha = pa; src->cache_entry.flags.alpha = pa;
} }
if (!havecol) if (!havecol)
{ {
#undef COLMUL #undef COLMUL

View File

@ -93,10 +93,10 @@
{ {
# ifdef COLMUL # ifdef COLMUL
DATA32 val1, cval; // col DATA32 val1, cval; // col
# endif # endif
# ifdef COLBLACK # ifdef COLBLACK
*d = 0xff000000; // col *d = 0xff000000; // col
# else # else
s = sp + ((v >> (FP + FPI)) * sw) + s = sp + ((v >> (FP + FPI)) * sw) +
(u >> (FP + FPI)); (u >> (FP + FPI));
# ifdef COLMUL # ifdef COLMUL
@ -104,12 +104,12 @@
cval = INTERP_256((cv >> 16), c2, c1); // col cval = INTERP_256((cv >> 16), c2, c1); // col
*d = MUL4_SYM(cval, val1); *d = MUL4_SYM(cval, val1);
cv += cd; // col cv += cd; // col
# else # else
*d = *s; *d = *s;
# endif # endif
u += ud; u += ud;
v += vd; v += vd;
# endif # endif
d++; d++;
ww--; ww--;
} }