protected unsafe override void RenderLine (ISurface src, ISurface dst, Rectangle rect)
{
var bulge = (float)amount;
var hw = dst.Width / 2f;
var hh = dst.Height / 2f;
var maxrad = Math.Min (hw, hh);
var amt = bulge / 100f;
hh = hh + (float)offset.Y * hh;
hw = hw + (float)offset.X * hw;
for (var y = rect.Top; y <= rect.Bottom; y++) {
var dstPtr = dst.GetPointAddress (rect.Left, y);
var srcPtr = src.GetPointAddress (rect.Left, y);
var v = y - hh;
for (var x = rect.Left; x <= rect.Right; x++) {
var u = x - hw;
var r = (float)Math.Sqrt (u * u + v * v);
var rscale1 = (1f - (r / maxrad));
if (rscale1 > 0) {
var rscale2 = 1 - amt * rscale1 * rscale1;
var xp = u * rscale2;
var yp = v * rscale2;
*dstPtr = Utility.GetBilinearSampleClamped (src, xp + hw, yp + hh);
} else {
*dstPtr = *srcPtr;
}
++dstPtr;
++srcPtr;
}
}
}
#endregion