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

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

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

File loaders/savers

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

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 0 0 FFmpeg video frame importer
ff-save 0 0 FFmpeg video frame output sink. GEGL op is work in progress.
rawbayer-load 0 0 for RAWBAYER and RAWBAYERS format. GEGL op is work in progress
rgbe-load 0 0 for Radiance HDR format with extensions HDR and PIC
rgbe-save 0 0 for Radiance HDR format with extensions HDR and PIC
svg-load 0 0 for SVG and SVGZ format

Port of new GEGL ops to OpenCL

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