attempt to fix interpolation when y0>y1
This commit is contained in:
parent
8f031f698b
commit
800540b710
|
@ -199,20 +199,44 @@ public:
|
||||||
{
|
{
|
||||||
if (xdiff == 0) return y0;
|
if (xdiff == 0) return y0;
|
||||||
|
|
||||||
if (wdiff != 0)
|
s32 ybase, ydiff;
|
||||||
return y0 + (((y1 - y0) * yfactor) >> shift);
|
if (y1 < y0)
|
||||||
|
{
|
||||||
|
ybase = y0;
|
||||||
|
ydiff = y1 - y0 - 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return y0 + (((y1 - y0) * x) / xdiff);
|
{
|
||||||
|
ybase = y0;
|
||||||
|
ydiff = y1 - y0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wdiff != 0)
|
||||||
|
return ybase + ((ydiff * yfactor) >> shift);
|
||||||
|
else
|
||||||
|
return ybase + ((ydiff * x) / xdiff);
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 InterpolateZ(s32 z0, s32 z1, bool wbuffer)
|
s32 InterpolateZ(s32 z0, s32 z1, bool wbuffer)
|
||||||
{
|
{
|
||||||
if (xdiff == 0) return z0;
|
if (xdiff == 0) return z0;
|
||||||
|
|
||||||
if ((wdiff != 0) && wbuffer)
|
s32 zbase, zdiff;
|
||||||
return z0 + (((s64)(z1 - z0) * yfactor) >> shift);
|
if (z1 < z0)
|
||||||
|
{
|
||||||
|
zbase = z0;
|
||||||
|
zdiff = z1 - z0 - 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return z0 + (((s64)(z1 - z0) * x) / xdiff);
|
{
|
||||||
|
zbase = z0;
|
||||||
|
zdiff = z1 - z0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((wdiff != 0) && wbuffer)
|
||||||
|
return zbase + (((s64)zdiff * yfactor) >> shift);
|
||||||
|
else
|
||||||
|
return zbase + (((s64)zdiff * x) / xdiff);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in New Issue