Hey Vincent, On Wed, Dec 28, 2016 at 11:34:25PM +0100, Vincent wrote: > I'm evaluating gegl to replace the image display part of siril, a free > astronomy image processor [1]. Siril is a GTK+3 application, so I > naturally tried gegl-gtk which seems to have be abandonned for some > time. I have updated it to compile with gegl 3.10, and examples are > apparently working, if someone is interested the code is available [2]. > > I have a hard time understanding the basic concepts of GEGL, in > particular the graph. I could not find a clear documentation for GEGL so > my knowledge comes mainly from the gegl-gtk examples, There is some documentation on http://gegl.org/. If you are looking for real world GTK+ applications based on GEGL, you can look at GIMP (https://git.gnome.org/browse/gimp) or GNOME Photos (https://git.gnome.org/browse/gnome-photos). As for GTK+ widget to render the output of a GEGL graph, GNOME Photos started out by using gegl-gtk (it actually had a copy of the code to avoid depending on a weakly maintained library). Since then the code has evolved a bit and can be found in src/photos-image-view.[ch]. > so please tell me > if the following is right: some nodes of the graph are data producers, > some are data processors, Right. GEGL uses 'source' and 'sink' instead of 'producer' and 'consumer'. > some are data consumers like saving to disk or > displaying. In general, there's one data producer and one data consumer > in the graph, and there can be many data processors, the image > processing operations. It is not that uncommon to have more than one data producer (or source) in a graph. eg., if you want to apply a gradient or vignette to an image. Similarly, you may have multiple sinks connected to a source. > The fact that there seems to be a root to all > graphs, Note that the root node is optional, but, yes, nodes usually have one. > from which all other nodes are instantiated as children with > gegl_node_new_child() is very disturbing because that would mean that it > is a tree, not a graph, so I assumed that nodes are automatically > connected from parent to child, which doesn't seem to be the case at > all. The root is mainly for convenience. For example: (a) The root node usually takes over ownership of the other nodes in a graph, so you don't need to destroy them individually. (b) A node can have a meta-operation constructed from several other operations. As long as the internal nodes are connected to the input/output/... proxies of the parent, it will behave like any other node. > I will need two types of graphs for image data display: one for grey > images channels display with at least a basic brightness/contrast > control duplicated for each of the R G and B channels, one that displays > colour images recombined from the three greys. Anybody has an idea about > how I can recombine the resulting images from the three grey graphs and > display it into a new gegl-gtk widget? You will need a composer to re-combine the three channels. Since you have 3 inputs, you will need an operation that sub-classes GeglOperationPointComposer3. There might be something already available in GEGL (grep for GEGL_OP_POINT_COMPOSER3), or you can write your own. I hope this helps. Happy hacking, Rishi _______________________________________________ gegl-developer-list mailing list List address: gegl-developer-list@xxxxxxxxx List membership: https://mail.gnome.org/mailman/listinfo/gegl-developer-list