Difference between revisions of "Hacking:Porting filters to GEGL"

From GIMP Developer Wiki
Jump to: navigation, search
(All table heads: add cross references to git log to quickly check for updates)
(Make porting matrix easier to read and maintain by using templates)
Line 36: Line 36:
 
== Processing, color grading and effects ==
 
== Processing, color grading and effects ==
  
{| class="wikitable" style="text-align: center;"
+
{| class="wikitable" style="text-align: left;"
!style="text-align: left;"|'''GIMP filter'''
+
!'''GIMP filter'''
 
!style="text-align: center;"|[https://git.gnome.org/browse/gimp/log/plug-ins '''GEGL operation''']
 
!style="text-align: center;"|[https://git.gnome.org/browse/gimp/log/plug-ins '''GEGL operation''']
 
!style="text-align: center;"|[https://git.gnome.org/browse/gegl/log/opencl '''OpenCL version''']
 
!style="text-align: center;"|[https://git.gnome.org/browse/gegl/log/opencl '''OpenCL version''']
!style="text-align: left;"|'''Comment'''
+
!'''Comment'''
 
|-
 
|-
|align="left" | Alien Map || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Alien Map || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" | Align Visible Layers || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Align Visible Layers || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" | Antialias || bgcolor="Yellow" | ? || bgcolor="Salmon"  | 0 ||
+
|Antialias || {{unknown}} || {{no}} ||
 
|-
 
|-
|align="left" | Apply Canvas || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Apply Canvas || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" | Apply Lens || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Apply Lens || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" | Assign Color Profile || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Assign Color Profile || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" | Autocrop Image || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Autocrop Image || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Autocrop Layer || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Autocrop Layer || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Border Average || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Border Average || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Bump Map || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Bump Map || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Cartoon ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Cartoon ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Channel Mixer || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Channel Mixer || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Checkerboard ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Checkerboard ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |CML Explorer || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|CML Explorer || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Color to Alpha ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Color to Alpha ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Colorcube Analysis || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Colorcube Analysis || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Color Enhance || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Color Enhance || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Color Exchange || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Color Exchange || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Compose || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Compose || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Convert to Color Profile || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Convert to Color Profile || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Convolution Matrix || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||  
+
|Convolution Matrix || {{wip}} || {{no}} ||  
 
|-
 
|-
|align="left" |Crop Tool ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Crop Tool ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |CSS stylesheet || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|CSS stylesheet || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Cubism || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||  
+
|Cubism || {{wip}} || {{no}} ||  
 
|-
 
|-
|align="left" |Curve Bend || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Curve Bend || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Decompose || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Decompose || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Deinterlace || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Deinterlace || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |Depth Merge || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Depth Merge || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Despeckle || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Despeckle || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Destripe || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Destripe || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Difference of Gaussians ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 || align="left" | The port is missing Normalize and Invert options
+
|Difference of Gaussians ||{{yes}} || {{no}} || The port is missing Normalize and Invert options
 
|-
 
|-
|align="left" |Diffraction Patterns || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Diffraction Patterns || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Dilate || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Dilate || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Displace || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Displace || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Drop Shadow ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 || align="left" | The GEGL port doesn't have an option for the shadow color and doesn't seem to work in the Mac build.
+
|Drop Shadow ||{{yes}} || {{no}} || The GEGL port doesn't have an option for the shadow color and doesn't seem to work in the Mac build.
 
|-
 
|-
|align="left" |Edge... || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||  
+
|Edge... || {{no}} || {{no}} ||  
 
|-
 
|-
|align="left" |Emboss || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Emboss || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |Engrave || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Engrave || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Erode || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Erode || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Filmstrip || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Filmstrip || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Filterpack || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Filterpack || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Flame || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Flame || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Foreground Selection Tool ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 || align="left" | In GEGLs matting.c. Needs to be made accessible from the GIMP GUI.
+
|Foreground Selection Tool ||{{yes}} || {{no}} || In GEGLs matting.c. Needs to be made accessible from the GIMP GUI.
 
|-
 
|-
|align="left" |Fractal Explorer ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Fractal Explorer ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Fractal Trace || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Fractal Trace || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |From Webpage || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 || align="left" | Probably doesn't need porting
+
|From Webpage || {{no}} || {{no}} || Probably doesn't need porting
 
|-
 
|-
|align="left" |Gaussian blur ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X || align="left" | Needs abyss policy
+
|Gaussian blur ||{{yes}} ||{{yes}} || Needs abyss policy
 
|-
 
|-
|align="left" |Gfig || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 || align="left" | Probably doesn't need porting
+
|Gfig || {{no}} || {{no}} || Probably doesn't need porting
 
|-
 
|-
|align="left" |GIMPressionist || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|GIMPressionist || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Glass Tile || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Glass Tile || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Gradient Flare || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Gradient Flare || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Gradient Map || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Gradient Map || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Grey ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X ||
+
|Grey ||{{yes}} ||{{yes}} ||
 
|-
 
|-
|align="left" |Grid ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 || align="left" | Missing intersection option, is it needed ?
+
|Grid ||{{yes}} || {{no}} || Missing intersection option, is it needed ?
 
|-
 
|-
|align="left" |Hot || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Hot || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |HSV Noise ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|HSV Noise ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Hurl ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Hurl ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |IFS Fractal || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|IFS Fractal || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Illusion || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Illusion || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Image Map || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 || align="left" | Probably doesn't need porting
+
|Image Map || {{no}} || {{no}} || Probably doesn't need porting
 
|-
 
|-
|align="left" |Invert ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X ||
+
|Invert ||{{yes}} ||{{yes}} ||
 
|-
 
|-
|align="left" |iWarp || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 || align="left" | To be replaced with Warp Transform tool
+
|iWarp || {{no}} || {{no}} || To be replaced with Warp Transform tool
 
|-
 
|-
|align="left" |Java map || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 || align="left" | Probably doesn't need porting
+
|Java map || {{no}} || {{no}} || Probably doesn't need porting
 
|-
 
|-
|align="left" |Jigsaw || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Jigsaw || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Laplace ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Laplace ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Lens Distortion ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Lens Distortion ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Lens Flare || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Lens Flare || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Levels Tool ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X ||
+
|Levels Tool ||{{yes}} ||{{yes}} ||
 
|-
 
|-
|align="left" |Lighting Effects || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Lighting Effects || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Make Seamless || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Make Seamless || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Maximum RGB || colspan=2 | Will be removed without replacement || ||
+
|Maximum RGB || colspan=2 | Will be removed without replacement || ||
 
|-
 
|-
|align="left" |Maze || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Maze || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Mosaic || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Mosaic || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Motion Blur ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X || align="left" | The GEGL port is incomplete (no type and center selection)
+
|Motion Blur ||{{yes}} ||{{yes}} || The GEGL port is incomplete (no type and center selection)
 
|-
 
|-
|align="left" |Neon || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Neon || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Newsprint || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Newsprint || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |NL Filter || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|NL Filter || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Normalize || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Normalize || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Noise Spread || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Noise Spread || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |Oilify ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X ||
+
|Oilify ||{{yes}} ||{{yes}} ||
 
|-
 
|-
|align="left" |Optimize (Difference) || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Optimize (Difference) || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Optimize (for GIF) || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Optimize (for GIF) || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Pagecurl || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Pagecurl || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Palette Map || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Palette Map || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Paper Tile || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Paper Tile || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Photocopy ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Photocopy ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Pick ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Pick ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Pixelize ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X || align="left" | Needs abyss policy
+
|Pixelize ||{{yes}} ||{{yes}} || Needs abyss policy
 
|-
 
|-
|align="left" |Plasma || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Plasma || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |Playback || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 || align="left" | Probably doesn't have to be ported ?
+
|Playback || {{no}} || {{no}} || Probably doesn't have to be ported ?
 
|-
 
|-
|align="left" |Polar Coordinates ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Polar Coordinates ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Posterize Tool ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Posterize Tool ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Qbist || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Qbist || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Recompose || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Recompose || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Red Eye Removal || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Red Eye Removal || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |Retinex || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Retinex || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |RGB Noise ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|RGB Noise ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Ripple ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 || align="left" | Complete in abyss branch
+
|Ripple ||{{yes}} || {{no}} || Complete in abyss branch
 
|-
 
|-
|align="left" |Rotate Colors || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Rotate Colors || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |Sample Colorize || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Sample Colorize || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Selective Gaussian Blur || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Selective Gaussian Blur || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Shift ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Shift ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Sinus || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Sinus || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Slur ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Slur ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Smooth Palette || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Smooth Palette || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Sobel ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X ||
+
|Sobel ||{{yes}} ||{{yes}} ||
 
|-
 
|-
|align="left" |Softglow ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Softglow ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Solid Noise || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Solid Noise || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Sparkle || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Sparkle || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Sphere Designer || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Sphere Designer || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Spread ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Spread ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Stretch Contrast ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 || align="left" | Not sure we need that with GEGL being the core of GIMP
+
|Stretch Contrast ||{{yes}} || {{no}} || Not sure we need that with GEGL being the core of GIMP
 
|-
 
|-
|align="left" |Stretch HSV || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Stretch HSV || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Supernova || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Supernova || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Transform Tools (Rotate, Scale, Shear, Translate) ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Transform Tools (Rotate, Scale, Shear, Translate) ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Threshold Tool ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X || align="left" | The GEGL port misses setting the upper bound (=the right slider triangle in the GIMP tool).
+
|Threshold Tool ||{{yes}} ||{{yes}} || The GEGL port misses setting the upper bound (=the right slider triangle in the GIMP tool).
 
|-
 
|-
|align="left" |Tile ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Tile ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Unoptimize || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Unoptimize || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Unsharp Mask ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Unsharp Mask ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Value Invert ||bgcolor="LightGreen" | X ||bgcolor="LightGreen" | X ||
+
|Value Invert ||{{yes}} ||{{yes}} ||
 
|-
 
|-
|align="left" |Value Propagate || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Value Propagate || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Van Gogh (LIC) || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 || align="left" | The filter has nothing to do with van-Gogh-style art and has no obvious function. We should remove it.
+
|Van Gogh (LIC) || {{no}} || {{no}} || The filter has nothing to do with van-Gogh-style art and has no obvious function. We should remove it.
 
|-
 
|-
|align="left" |Video || bgcolor="Salmon"  | 0 || bgcolor="Salmon"  | 0 ||
+
|Video || {{no}} || {{no}} ||
 
|-
 
|-
|align="left" |Warp || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Warp || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |Waves ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 || align="left" | Missing reflective option that produce strange result, I suggest dropping that.
+
|Waves ||{{yes}} || {{no}} || Missing reflective option that produce strange result, I suggest dropping that.
 
|-
 
|-
|align="left" |Whirl and Pinch || bgcolor="Yellow" | W.I.P. || bgcolor="Salmon"  | 0 ||
+
|Whirl and Pinch || {{wip}} || {{no}} ||
 
|-
 
|-
|align="left" |Wind ||bgcolor="LightGreen" | X || bgcolor="Salmon"  | 0 ||
+
|Wind ||{{yes}} || {{no}} ||
 
|-
 
|-
|align="left" |Zealous Crop || bgcolor="Yellow" | ? || bgcolor="Salmon"  | 0 ||
+
|Zealous Crop || {{unknown}} || {{no}} ||
 
|}
 
|}
  
 
== File loaders/savers ==
 
== File loaders/savers ==
  
{| class="wikitable" style="text-align: center;"
+
{| class="wikitable" style="text-align: left;"
! align="left" | '''GIMP filter'''  
+
! '''GIMP filter'''  
 
! [https://git.gnome.org/browse/gimp/log/plug-ins '''GEGL version''']
 
! [https://git.gnome.org/browse/gimp/log/plug-ins '''GEGL version''']
 
! [https://git.gnome.org/browse/gegl/log/opencl '''OpenCL version''']
 
! [https://git.gnome.org/browse/gegl/log/opencl '''OpenCL version''']
! align="left" | '''Comment'''
+
! '''Comment'''
 
|-
 
|-
| align="left" | file-aa || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-aa || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-bmp || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-bmp || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-cel || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-cel || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-csource || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-csource || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-desktop-link || bgcolor="LightGreen" | X || bgcolor="LightGreen" | X || align="left" | doesn't need to be ported
+
| file-desktop-link || {{yes}} || {{yes}} || doesn't need to be ported
 
|-
 
|-
| align="left" | file-dicom || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-dicom || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-exr-load || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-exr-load || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-exr-save || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 || -
+
| file-exr-save || {{yes}} || {{no}} || -
 
|-
 
|-
| align="left" | file-faxg3 || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-faxg3 || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-fits || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-fits || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-fli || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-fli || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-gbr || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-gbr || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-gif-load || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-gif-load || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-gif-save || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-gif-save || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-gih || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-gih || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-glob || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" | for file globbing -> is GEGL-port necessary?
+
| file-glob || {{no}} || {{no}} || for file globbing -> is GEGL-port necessary?
 
|-
 
|-
| align="left" | file-header || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-header || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-html-table || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-html-table || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-ico || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-ico || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-jpeg || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 || -
+
| file-jpeg || {{yes}} || {{no}} || -
 
|-
 
|-
| align="left" | file-jp2-load || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 || -
+
| file-jp2-load || {{yes}} || {{no}} || -
 
|-
 
|-
| align="left" | file-mng || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-mng || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-pat || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-pat || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-pcx || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-pcx || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-pdf-load || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || -
+
| file-pdf-load || {{no}} || {{no}} || -
 
|-
 
|-
| align="left" | file-pdf-save || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-pdf-save || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-pix || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-pix || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-png || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 || -
+
| file-png || {{yes}} || {{no}} || -
 
|-
 
|-
| align="left" | file-pnm || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 || -
+
| file-pnm || {{yes}} || {{no}} || -
 
|-
 
|-
| align="left" | file-ps || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || -
+
| file-ps || {{no}} || {{no}} || -
 
|-
 
|-
| align="left" | file-psd || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || -
+
| file-psd || {{no}} || {{no}} || -
 
|-
 
|-
| align="left" | file-psp || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-psp || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-raw || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" | see GEGL-op gegl:raw-load
+
| file-raw || {{no}} || {{no}} || see GEGL-op gegl:raw-load
 
|-
 
|-
| align="left" | file-sgi || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-sgi || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-sunras || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || -
+
| file-sunras || {{no}} || {{no}} || -
 
|-
 
|-
| align="left" | file-svg || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" | extra GEGL-op gegl:svg-load exists for loading SVG and SVGZ format
+
| file-svg || {{no}} || {{no}} || extra GEGL-op gegl:svg-load exists for loading SVG and SVGZ format
 
|-
 
|-
| align="left" | file-tga || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-tga || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-tiff-load || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-tiff-load || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-tiff-save || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 ||  
+
| file-tiff-save || {{no}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-wmf || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || -
+
| file-wmf || {{no}} || {{no}} || -
 
|-
 
|-
| align="left" | file-xbm || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-xbm || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-xmc || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || -
+
| file-xmc || {{no}} || {{no}} || -
 
|-
 
|-
| align="left" | file-xpm || bgcolor="LightGreen" | X || bgcolor="Salmon" | 0 ||  
+
| file-xpm || {{yes}} || {{no}} ||  
 
|-
 
|-
| align="left" | file-xwd || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || -
+
| file-xwd || {{no}} || {{no}} || -
 
|}
 
|}
  
Line 401: Line 401:
 
Currently they are listed here for completeness.  
 
Currently they are listed here for completeness.  
  
{| class="wikitable" style="text-align: center;"
+
{| class="wikitable" style="text-align: left;"
!align="left" | '''GEGL filter'''  
+
!'''GEGL filter'''  
 
! [https://git.gnome.org/browse/gimp/log/plug-ins '''GIMP filter''' ]
 
! [https://git.gnome.org/browse/gimp/log/plug-ins '''GIMP filter''' ]
 
! [https://git.gnome.org/browse/gegl/log/opencl '''OpenCL version''']  
 
! [https://git.gnome.org/browse/gegl/log/opencl '''OpenCL version''']  
! align="left" | '''Comment'''
+
! '''Comment'''
 
|-
 
|-
|align="left" | ff-load || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" | FFmpeg video frame importer
+
|ff-load || {{no}} || {{no}} || FFmpeg video frame importer
 
|-
 
|-
|align="left" | ff-save || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" | FFmpeg video frame output sink. GEGL op is work in progress.
+
|ff-save || {{no}} || {{no}} || FFmpeg video frame output sink. GEGL op is work in progress.
 
|-
 
|-
|align="left" | rawbayer-load || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" |  RAWBAYER and RAWBAYERS format. GEGL op is work in progress
+
|rawbayer-load || {{no}} || {{no}} ||  RAWBAYER and RAWBAYERS format. GEGL op is work in progress
 
|-
 
|-
|align="left" | rgbe-load || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" | for Radiance HDR format with extensions HDR and PIC
+
|rgbe-load || {{no}} || {{no}} || for Radiance HDR format with extensions HDR and PIC
 
|-
 
|-
|align="left" | rgbe-save || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" | for Radiance HDR format with extensions HDR and PIC
+
|rgbe-save || {{no}} || {{no}} || for Radiance HDR format with extensions HDR and PIC
 
|-
 
|-
|align="left" | svg-load || bgcolor="Salmon" | 0 || bgcolor="Salmon" | 0 || align="left" | for SVG and SVGZ format
+
|svg-load || {{no}} || {{no}} || for SVG and SVGZ format
 
|}
 
|}
  
 
= Port of new GEGL ops to OpenCL=
 
= Port of new GEGL ops to OpenCL=
  
{| class="wikitable" style="text-align: center;"
+
{| class="wikitable" style="text-align: left;"
!align="left" |'''GEGL operation'''  
+
!'''GEGL operation'''  
 
! [https://git.gnome.org/browse/gegl/log/opencl '''OpenCL version''']  
 
! [https://git.gnome.org/browse/gegl/log/opencl '''OpenCL version''']  
! align="left"| '''Comment'''
+
!'''Comment'''
 
|-
 
|-
|align="left" |Bilateral filter ||bgcolor="LightGreen" | X ||  
+
|Bilateral filter ||{{yes}} ||  
 
|-
 
|-
|align="left" |Box blur ||bgcolor="LightGreen" | X ||  
+
|Box blur ||{{yes}} ||  
 
|-
 
|-
|align="left" |Box max || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Box max || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Box min || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Box min || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Box percentile || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Box percentile || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Brightness and Contrast ||bgcolor="LightGreen" | X ||  
+
|Brightness and Contrast ||{{yes}} ||  
 
|-
 
|-
|align="left" |Buffer cache  || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress. Does this need an OpenCL port?
+
|Buffer cache  || {{no}} || GEGL op is work in progress. Does this need an OpenCL port?
 
|-
 
|-
|align="left" |Cielch Noise || bgcolor="Salmon"  | 0 ||  
+
|Cielch Noise || {{no}} ||  
 
|-
 
|-
|align="left" |C2g ||bgcolor="LightGreen" | X || align="left"| HDR related
+
|C2g ||{{yes}} || HDR related
 
|-
 
|-
|align="left" |Color || bgcolor="Salmon"  | 0 ||  
+
|Color || {{no}} ||  
 
|-
 
|-
|align="left" |Color Reduction || bgcolor="Salmon"  | 0 ||  
+
|Color Reduction || {{no}} ||  
 
|-
 
|-
|align="left" |Color Temperature ||bgcolor="LightGreen" | X ||  
+
|Color Temperature ||{{yes}} ||  
 
|-
 
|-
|align="left" |Contrast Curve || bgcolor="Salmon"  | 0 ||  
+
|Contrast Curve || {{no}} ||  
 
|-
 
|-
|align="left" |Demosaic (bimedian) || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Demosaic (bimedian) || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Demosaic (simple) || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Demosaic (simple) || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Disc percentile || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Disc percentile || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Display || bgcolor="Salmon"  | 0 || align="left"| Does this need an OpenCL port?
+
|Display || {{no}} || Does this need an OpenCL port?
 
|-
 
|-
|align="left" |Ditto || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress. Test op - does this need an OpenCL port?
+
|Ditto || {{no}} || GEGL op is work in progress. Test op - does this need an OpenCL port?
 
|-
 
|-
|align="left" |Dot || bgcolor="Salmon"  | 0 ||
+
|Dot || {{no}} ||
 
|-
 
|-
|align="left" |Exp combine || bgcolor="Salmon"  | 0 || align="left"| HDR related
+
|Exp combine || {{no}} || HDR related
 
|-
 
|-
|align="left" |Exposure || bgcolor="Salmon"  | 0 || align="left"| HDR related
+
|Exposure || {{no}} || HDR related
 
|-
 
|-
|align="left" |Fattal02 || bgcolor="Salmon"  | 0 || align="left"| HDR related
+
|Fattal02 || {{no}} || HDR related
 
|-
 
|-
|align="left" |gluas || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress. Does this need an OpenCL port?
+
|gluas || {{no}} || GEGL op is work in progress. Does this need an OpenCL port?
 
|-
 
|-
|align="left" |HStack || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|HStack || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Image compare || bgcolor="Salmon"  | 0 ||
+
|Image compare || {{no}} ||
 
|-
 
|-
|align="left" |Introspect || bgcolor="Salmon"  | 0 || align="left"| Does this need an OpenCL port?
+
|Introspect || {{no}} || Does this need an OpenCL port?
 
|-
 
|-
|align="left" |Kuwahara || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Kuwahara || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Lens correction || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Lens correction || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Line profile || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Line profile || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Linear gradient || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Linear gradient || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Mandelbrot || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Mandelbrot || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Mantiuk06 || bgcolor="Salmon"  | 0 || align="left"| HDR related
+
|Mantiuk06 || {{no}} || HDR related
 
|-
 
|-
|align="left" |Mirrors || bgcolor="Salmon"  | 0 ||  
+
|Mirrors || {{no}} ||  
 
|-
 
|-
|align="left" |Mono mixer ||bgcolor="LightGreen" | X ||  
+
|Mono mixer ||{{yes}} ||  
 
|-
 
|-
|align="left" |Noise || bgcolor="Salmon"  | 0 || align="left"| Perlin noise generator
+
|Noise || {{no}} || Perlin noise generator
 
|-
 
|-
|align="left" |Noise Reduction ||bgcolor="LightGreen" | X ||  
+
|Noise Reduction ||{{yes}} ||  
 
|-
 
|-
|align="left" |Over || bgcolor="Salmon"  | 0 || align="left"| Porter Duff operation over (d = cA + cB * (1 - aA))
+
|Over || {{no}} || Porter Duff operation over (d = cA + cB * (1 - aA))
 
|-
 
|-
|align="left" |Radial gradient || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|Radial gradient || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |Reinhard05 ||bgcolor="LightGreen" | X || align="left"| HDR related
+
|Reinhard05 ||{{yes}} || HDR related
 
|-
 
|-
|align="left" |Remap || bgcolor="Salmon"  | 0 ||  
+
|Remap || {{no}} ||  
 
|-
 
|-
|align="left" |SNN (mean) ||bgcolor="LightGreen" | X ||  
+
|SNN (mean) ||{{yes}} ||  
 
|-
 
|-
|align="left" |SNN (percentile) || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.
+
|SNN (percentile) || {{no}} || GEGL op is work in progress.
 
|-
 
|-
|align="left" |SVG Hue rotate|| bgcolor="Salmon"  | 0 ||  
+
|SVG Hue rotate|| {{no}} ||  
 
|-
 
|-
|align="left" |SVG Luminance to Alpha || bgcolor="Salmon"  | 0 ||  
+
|SVG Luminance to Alpha || {{no}} ||  
 
|-
 
|-
|align="left" |SVG Matrix || bgcolor="Salmon"  | 0 ||  
+
|SVG Matrix || {{no}} ||  
 
|-
 
|-
|align="left" |SVG Saturate || bgcolor="Salmon"  | 0 ||  
+
|SVG Saturate || {{no}} ||  
 
|-
 
|-
|align="left" |Unpremul || bgcolor="Salmon"  | 0 || align="left"| GEGL op is work in progress.  
+
|Unpremul || {{no}} || GEGL op is work in progress.  
 
|-
 
|-
|align="left" |Vignette ||bgcolor="LightGreen" | X ||  
+
|Vignette ||{{yes}} ||  
 
|-
 
|-
|align="left" |Weighted Blend || bgcolor="Salmon"  | 0 ||  
+
|Weighted Blend || {{no}} ||  
 
|}
 
|}

Revision as of 19:51, 2 May 2013

How to port

This is the general process to write a new GEGL operation:

  1. Gather information.
    1. Read the plugin you want to port, understand the algorithm hidden in it.
    2. Read carefully the GEGL website. There is lot of information here.
    3. Read the Babl website and understand the difference between color models.
    4. You may want to find a similar existing operation and get inspiration from it.
  2. Choose a base class. This is the general structure of your operation, the number of input/output, what kind of optimization GEGL can do.
  3. Create a new file for your operation. No need to register it in some Makefile, the build system will build every C file present in the operations directory. The exact directory where you should put your file is explained in the GEGL website.
  4. Copy another operation with the same base class and clean it to have your operation skeleton. GEGL use a macro system called GEGL chant, that avoid you to write all the GObject boilerplate, and register easily parameters for your op. Look other operation to see how it works.
  5. Use the prepare function to indicate what color model your op will operate, for each input/output.
  6. Create your op's parameter using the chant system. You can have integer, floats, string, color, curve, enum ... There is some predefined enum in the GEGL core, for instance GeglSamplerType. You can register your own, like in the ripple op.
  7. Write your operation in the process function. Some tips here:
    1. GEGL store data in tile, so it impose some restriction, especially for transform op. You usually need to write your algorithm backward, ie iterate over the output, compute where the data come from, use a sampler to get it and affect the output.
    2. ROI mean region of interest, it's the area your are currently working on.
    3. Sometimes you need to know the size of the full input, not just the roi. You can have it using gegl_operation_source_get_bounding_box.
    4. Rather than carry a lot of parameter in you different functions, you can register a custom structure in the chant system, like the WarpPrivate structure in the warp op.
    5. When you fetch data outside of the input buffer (in it's abyss) you get by default zeroed memory. The abyss policy allow you to chose what you want here, and in particular, you can choose to clamp to the border, loop in the buffer extent ... It allows to write more clever algorithm. For instance, see the ripple op. Setting the abyss policy to GEGL_ABYSS_LOOP add the tileability to the op for free.
  8. Test your operation. You can use the gegl binary to run an xml file, or use the GEGL tool in GIMP.

Porting matrix (as of 09.04.2013)

States
X finished
0 unfinished
W.I.P. work in progress

Processing, color grading and effects

GIMP filter GEGL operation OpenCL version Comment
Alien Map No No
Align Visible Layers No No
Antialias unknown No
Apply Canvas No No
Apply Lens No No
Assign Color Profile No No
Autocrop Image No No
Autocrop Layer No No
Border Average No No
Bump Map No No
Cartoon Yes No
Channel Mixer No No
Checkerboard Yes No
CML Explorer No No
Color to Alpha Yes No
Colorcube Analysis No No
Color Enhance No No
Color Exchange No No
Compose No No
Convert to Color Profile No No
Convolution Matrix work in progress No
Crop Tool Yes No
CSS stylesheet No No
Cubism work in progress No
Curve Bend No No
Decompose No No
Deinterlace work in progress No
Depth Merge No No
Despeckle No No
Destripe No No
Difference of Gaussians Yes No The port is missing Normalize and Invert options
Diffraction Patterns No No
Dilate No No
Displace No No
Drop Shadow Yes No The GEGL port doesn't have an option for the shadow color and doesn't seem to work in the Mac build.
Edge... No No
Emboss work in progress No
Engrave No No
Erode No No
Filmstrip No No
Filterpack No No
Flame No No
Foreground Selection Tool Yes No In GEGLs matting.c. Needs to be made accessible from the GIMP GUI.
Fractal Explorer Yes No
Fractal Trace work in progress No
From Webpage No No Probably doesn't need porting
Gaussian blur Yes Yes Needs abyss policy
Gfig No No Probably doesn't need porting
GIMPressionist No No
Glass Tile No No
Gradient Flare No No
Gradient Map No No
Grey Yes Yes
Grid Yes No Missing intersection option, is it needed ?
Hot No No
HSV Noise Yes No
Hurl Yes No
IFS Fractal No No
Illusion No No
Image Map No No Probably doesn't need porting
Invert Yes Yes
iWarp No No To be replaced with Warp Transform tool
Java map No No Probably doesn't need porting
Jigsaw No No
Laplace Yes No
Lens Distortion Yes No
Lens Flare No No
Levels Tool Yes Yes
Lighting Effects No No
Make Seamless No No
Maximum RGB Will be removed without replacement
Maze No No
Mosaic No No
Motion Blur Yes Yes The GEGL port is incomplete (no type and center selection)
Neon No No
Newsprint No No
NL Filter No No
Normalize No No
Noise Spread work in progress No
Oilify Yes Yes
Optimize (Difference) No No
Optimize (for GIF) No No
Pagecurl No No
Palette Map No No
Paper Tile No No
Photocopy Yes No
Pick Yes No
Pixelize Yes Yes Needs abyss policy
Plasma work in progress No
Playback No No Probably doesn't have to be ported ?
Polar Coordinates Yes No
Posterize Tool Yes No
Qbist No No
Recompose No No
Red Eye Removal work in progress No
Retinex No No
RGB Noise Yes No
Ripple Yes No Complete in abyss branch
Rotate Colors work in progress No
Sample Colorize No No
Selective Gaussian Blur No No
Shift Yes No
Sinus No No
Slur Yes No
Smooth Palette No No
Sobel Yes Yes
Softglow Yes No
Solid Noise No No
Sparkle No No
Sphere Designer No No
Spread Yes No
Stretch Contrast Yes No Not sure we need that with GEGL being the core of GIMP
Stretch HSV No No
Supernova No No
Transform Tools (Rotate, Scale, Shear, Translate) Yes No
Threshold Tool Yes Yes The GEGL port misses setting the upper bound (=the right slider triangle in the GIMP tool).
Tile Yes No
Unoptimize No No
Unsharp Mask Yes No
Value Invert Yes Yes
Value Propagate No No
Van Gogh (LIC) No No The filter has nothing to do with van-Gogh-style art and has no obvious function. We should remove it.
Video No No
Warp work in progress No
Waves Yes No Missing reflective option that produce strange result, I suggest dropping that.
Whirl and Pinch work in progress No
Wind Yes No
Zealous Crop unknown No

File loaders/savers

GIMP filter GEGL version OpenCL version Comment
file-aa Yes No
file-bmp Yes No
file-cel Yes No
file-csource Yes No
file-desktop-link Yes Yes doesn't need to be ported
file-dicom Yes No
file-exr-load Yes No
file-exr-save Yes No -
file-faxg3 Yes No
file-fits Yes No
file-fli Yes No
file-gbr Yes No
file-gif-load Yes No
file-gif-save Yes No
file-gih Yes No
file-glob No No for file globbing -> is GEGL-port necessary?
file-header Yes No
file-html-table Yes No
file-ico Yes No
file-jpeg Yes No -
file-jp2-load Yes No -
file-mng Yes No
file-pat Yes No
file-pcx Yes No
file-pdf-load No No -
file-pdf-save Yes No
file-pix Yes No
file-png Yes No -
file-pnm Yes No -
file-ps No No -
file-psd No No -
file-psp Yes No
file-raw No No see GEGL-op gegl:raw-load
file-sgi Yes No
file-sunras No No -
file-svg No No extra GEGL-op gegl:svg-load exists for loading SVG and SVGZ format
file-tga Yes No
file-tiff-load Yes No
file-tiff-save No No
file-wmf No No -
file-xbm Yes No
file-xmc No No -
file-xpm Yes No
file-xwd No No -

New File loaders/savers

These file loaders/savers are implemented in GEGL, but not part of GIMP (yet). Currently they are listed here for completeness.

GEGL filter GIMP filter OpenCL version Comment
ff-load No No FFmpeg video frame importer
ff-save No No FFmpeg video frame output sink. GEGL op is work in progress.
rawbayer-load No No RAWBAYER and RAWBAYERS format. GEGL op is work in progress
rgbe-load No No for Radiance HDR format with extensions HDR and PIC
rgbe-save No No for Radiance HDR format with extensions HDR and PIC
svg-load No No for SVG and SVGZ format

Port of new GEGL ops to OpenCL

GEGL operation OpenCL version Comment
Bilateral filter Yes
Box blur Yes
Box max No GEGL op is work in progress.
Box min No GEGL op is work in progress.
Box percentile No GEGL op is work in progress.
Brightness and Contrast Yes
Buffer cache No GEGL op is work in progress. Does this need an OpenCL port?
Cielch Noise No
C2g Yes HDR related
Color No
Color Reduction No
Color Temperature Yes
Contrast Curve No
Demosaic (bimedian) No GEGL op is work in progress.
Demosaic (simple) No GEGL op is work in progress.
Disc percentile No GEGL op is work in progress.
Display No Does this need an OpenCL port?
Ditto No GEGL op is work in progress. Test op - does this need an OpenCL port?
Dot No
Exp combine No HDR related
Exposure No HDR related
Fattal02 No HDR related
gluas No GEGL op is work in progress. Does this need an OpenCL port?
HStack No GEGL op is work in progress.
Image compare No
Introspect No Does this need an OpenCL port?
Kuwahara No GEGL op is work in progress.
Lens correction No GEGL op is work in progress.
Line profile No GEGL op is work in progress.
Linear gradient No GEGL op is work in progress.
Mandelbrot No GEGL op is work in progress.
Mantiuk06 No HDR related
Mirrors No
Mono mixer Yes
Noise No Perlin noise generator
Noise Reduction Yes
Over No Porter Duff operation over (d = cA + cB * (1 - aA))
Radial gradient No GEGL op is work in progress.
Reinhard05 Yes HDR related
Remap No
SNN (mean) Yes
SNN (percentile) No GEGL op is work in progress.
SVG Hue rotate No
SVG Luminance to Alpha No
SVG Matrix No
SVG Saturate No
Unpremul No GEGL op is work in progress.
Vignette Yes
Weighted Blend No