From: Bill Spitzak Date: Wed, 31 Aug 2016 05:03:11 +0000 (-0700) Subject: pixman-filter: integral splitting is only needed for triangle filter X-Git-Tag: pixman-0.36.0~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8855b3a2a231ab348c02c0d92f0051b079eabfa3;p=platform%2Fupstream%2Fpixman.git pixman-filter: integral splitting is only needed for triangle filter Only the triangle is discontinuous at 0. The other filters resemble a cubic closely enough that Simpsons integration works without splitting. Changes by Søren: Rebase without the changes to the integral function, update comment to match the new code. Signed-off-by: Bill Spitzak Signed-off-by: Søren Sandmann Reviewed-by: Søren Sandmann --- diff --git a/pixman/pixman-filter.c b/pixman/pixman-filter.c index ecff852..878cf9d 100644 --- a/pixman/pixman-filter.c +++ b/pixman/pixman-filter.c @@ -160,18 +160,17 @@ integral (pixman_kernel_t kernel1, double x1, pixman_kernel_t kernel2, double scale, double x2, double width) { - /* If the integration interval crosses zero, break it into - * two separate integrals. This ensures that filters such - * as LINEAR that are not differentiable at 0 will still - * integrate properly. + /* The LINEAR filter is not differentiable at 0, so if the + * integration interval crosses zero, break it into two + * separate integrals. */ - if (x1 < 0 && x1 + width > 0) + if (kernel1 == PIXMAN_KERNEL_LINEAR && x1 < 0 && x1 + width > 0) { return integral (kernel1, x1, kernel2, scale, x2, - x1) + integral (kernel1, 0, kernel2, scale, x2 - x1, width + x1); } - else if (x2 < 0 && x2 + width > 0) + else if (kernel2 == PIXMAN_KERNEL_LINEAR && x2 < 0 && x2 + width > 0) { return integral (kernel1, x1, kernel2, scale, x2, - x2) +