Skip to content
  • Ell's avatar
    app: improve gimp_gegl_mask_combine_ellipse[_rect]() · 10443423
    Ell authored
    Improve gimp_gegl_mask_combine_ellipse_rect() -- the funciton
    responsible for rendering ellipse/rounded-rectangle selections.
    
    Most notably, this commit significantly improves the function's
    performance, by identifying whole tiles, whole rows, or parts of a
    row, that are fully inside, or fully outside, the ellipse, and
    filling them in bulk, instead of calculating the anti-aliasing
    value at each pixel, which is now only done along the
    circumference.
    
    This commit also improves anti-aliasing, by more accurately
    approximating the distance from a pixel to the ellipse, and by
    normalizing the distance according to the pixel's cross-section
    length in the direction of the said point.  In particular, we
    guarantee that pixels that are fully inside/outside the ellipse
    have a value of 1/0, respectively, facilitating the aforementioned
    optimization.
    
    Additionally, this commit fixes various edge cases where several
    primitives coincide at a single pixel (in the rounded-rectangle
    case), adds support for CHANNEL_OP_INTERSECT, and parallelizes
    processing.
    10443423