|
Packit |
bc1512 |
GEGL-0.2.0
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Table of Contents
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
JavaScript must be enabled in your browser to display the table of
|
|
Packit |
bc1512 |
contents.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL (Generic Graphics Library) is a graph based image processing
|
|
Packit |
bc1512 |
framework.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL provides infrastructure to do demand based cached non destructive
|
|
Packit |
bc1512 |
image editing on larger than RAM buffers. Through babl it provides
|
|
Packit |
bc1512 |
support for a wide range of color models and pixel storage formats for
|
|
Packit |
bc1512 |
input and output.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Features
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• Floating point handling and processing and output of larger 8bit,
|
|
Packit |
bc1512 |
16bit integer and 32bit floating point per component buffers larger
|
|
Packit |
bc1512 |
than RAM.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• C, vala, C#, Python and Ruby interfaces using a consistent DOM like
|
|
Packit |
bc1512 |
graph API to manage processing graphs.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• Processing
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Iterative chunk-wise processing.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Processes subregions and dependencies.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Subgraph caches to aid performance of non-destructive editing.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Experimental OpenCL acceleration, with possibility of hybrid
|
|
Packit |
bc1512 |
cpu/gpu processing.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• GeglBuffer
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Storage of all babl supported formats.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Tiled sparse buffers (larger than RAM images).
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ linear buffers (allocated internally or from external
|
|
Packit |
bc1512 |
allocation.)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ On demand tiled mipmapping.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ inter process shared storage
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ External tile-backends (allow wrapping other tiled buffer
|
|
Packit |
bc1512 |
systems to use them through the GeglBuffer API).
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• Operations
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ PNG, JPEG, SVG, EXR, RAW, ffmpeg, v4l and other image sources.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Pattern renderers
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Arithmetic operations
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ link_operations.html#porter_duff[porter duff compositing]
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ SVG filter modes and full set of compositing ops from SVG-1.2
|
|
Packit |
bc1512 |
draft.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Gaussian blur, bilateral-filter, symmetric nearest neighbour,
|
|
Packit |
bc1512 |
linear
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ blur, unsharp mask, pixelize and more.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Color correction.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Text rendering using cairo and pango.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ HDR exposure merging and tone mapping operations.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ Most operations operate in scRGB (using 32bit floating point/
|
|
Packit |
bc1512 |
HDR linear light RGBA)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• Bounding box based hit detection.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• XML serialization format (not-finalized)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
News
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
This website is built at the time of the previous GEGL tarball release,
|
|
Packit |
bc1512 |
for information about what might change on the way to the next release
|
|
Packit |
bc1512 |
follow the following news sources:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Change log
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
For day to day fixes, contributions and changes.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
NEWS
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The NEWS file for a list of major new features (also contains older
|
|
Packit |
bc1512 |
NEWS).
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
bugzilla
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
for known and tracked issues with GEGL and perhaps see the
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
mail
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The mailinglist archives for some discussion and announcement.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Gallery
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
For examples of what GEGL’s rendering engine currently can do look at
|
|
Packit |
bc1512 |
the gallery.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Bugzilla
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The GEGL project uses GNOME Bugzilla, a bug-tracking system that allows
|
|
Packit |
bc1512 |
us to coordinate bug reports. Bugzilla is also used for enhancement
|
|
Packit |
bc1512 |
requests and the preferred way to submit patches for GEGL is to open a
|
|
Packit |
bc1512 |
bug report and attach the patch to it. Bugzilla is also the closest you
|
|
Packit |
bc1512 |
will find to a roadmap for GEGL.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Below is a list of links to get you started with Bugzilla:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• List of Open Bugs
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• List of Open Bugs (excluding enhancement requests)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• List of Enhancement Proposals
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• Bugzilla Weekly Summary
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Community
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
You can subscribe to gegl-developer and view the archives here. The
|
|
Packit |
bc1512 |
GEGL developer list is the appopriate place to ask development
|
|
Packit |
bc1512 |
questions, and get more information about GEGL development in general.
|
|
Packit |
bc1512 |
You can email this list at gegl-developer-list@gnome.org.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL development is also discussed in #gegl on GIMPnet (irc.gimp.org).
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Copyright
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL is free software; you can redistribute it and/or modify it under
|
|
Packit |
bc1512 |
the terms of the GNU Lesser General Public License and GNU General
|
|
Packit |
bc1512 |
Public License as published by the Free Software Foundation; either
|
|
Packit |
bc1512 |
version 3 of the Licenses, or (at your option) any later version. The
|
|
Packit |
bc1512 |
library itself is licensed under LGPL while the sample commandline
|
|
Packit |
bc1512 |
application and GUI binary gegl is licensed under GPL.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Contributors
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Many people have contributed to GEGL over time the following lists are
|
|
Packit |
bc1512 |
are ordered chronologically according to when they are mentioned in the
|
|
Packit |
bc1512 |
ChangeLog.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Code:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Calvin Williamson, Caroline Dahloff, Manish Singh, Jay Cox Daniel
|
|
Packit |
bc1512 |
Rogers, Sven Neumann, Michael Natterer, Øyvind Kolås, Philip Lafleur,
|
|
Packit |
bc1512 |
Dominik Ernst, Richard Kralovic, Kevin Cozens, Victor Bogado, Martin
|
|
Packit |
bc1512 |
Nordholts, Geert Jordaens, Michael Schumacher, John Marshall, Étienne
|
|
Packit |
bc1512 |
Bersac, Mark Probst, Håkon Hitland, Tor Lillqvist, Hans Breuer, Deji
|
|
Packit |
bc1512 |
Akingunola and Bradley Broom, Hans Petter Jansson, Jan Heller,
|
|
Packit |
bc1512 |
dmacks@netscpace.org, Sven Anders, Hubert Figuière, Sam Hocevar, yahvuu
|
|
Packit |
bc1512 |
at gmail.com, Nicolas Robidoux, Ruben Vermeersch, Gary V. Vaughan,
|
|
Packit |
bc1512 |
James Legg, Henrik Åkesson, Fryderyk Dziarmagowski, Ozan Caglayan,
|
|
Packit |
bc1512 |
Tobias Mueller, Nils Philippsen, Adam Turcotte, Danny Robson, Javier
|
|
Packit |
bc1512 |
Jardón and Yakkov Selkowitz, Kaja Liiv, Eric Daoust, Damien de Lemeny,
|
|
Packit |
bc1512 |
Fabian Groffen, Vincent Untz, Debarshi Ray, Stuart Axon, Kao, Barak
|
|
Packit |
bc1512 |
Itkin, Michael Muré, Mikael Magnusson, Patrick Horgan, Tobias
|
|
Packit |
bc1512 |
Ellinghaus, Rasmus Hahn, Chantal Racette, John Cupitt, Anthony Thyssen,
|
|
Packit |
bc1512 |
Emilio Pozuelo Monfort, Robert Sasu, Massimo Valentini, Hans Lo,
|
|
Packit |
bc1512 |
Zbigniew Chyla, David Evans, Javier Jardón, Matteo F. Vescovi and Jan
|
|
Packit |
bc1512 |
Rüegg.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Documentation:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Garry R. Osgood, Øyvind Kolås, Kevin Cozens and Shlomi Fish.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Artwork:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Jakub Steiner, Øyvind Kolås, Tonda Tavalec
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Building from source
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL and it’s dependencies are known to work on Linux based systems,
|
|
Packit |
bc1512 |
windows with msys/mingw, and probably other platforms.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Download
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The latest development snapshot, and eventually stable versions of GEGL
|
|
Packit |
bc1512 |
are available at ftp://ftp.gimp.org/pub/gegl/.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The current code under development can be browsed online and cloned
|
|
Packit |
bc1512 |
from GNOME git using:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
$ git clone git://git.gnome.org/babl
|
|
Packit |
bc1512 |
$ git clone git://git.gnome.org/gegl
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Dependencies
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL currently builds and works on linux, win32 and OSX most probably
|
|
Packit |
bc1512 |
also on other systems where glib and gtk+ work.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• Core
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ glib (including gobject, and gmodule) 2.16 or newer, which
|
|
Packit |
bc1512 |
provides inheritance, dynamic modules, common algorithms and
|
|
Packit |
bc1512 |
data structures for C programming.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ babl 0.0.22 or newer (for pixel-format agnostisism).
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ libpng (png load/export ops, and image magick fallback import)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ ruby (only if building from git)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• GUI (sandbox for testing ops and the API)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ GTK+
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• Optional dependencies for operations.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ SDL (display op)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ libjpeg (jpg loader op)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ libopenexr (exr loader op)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ libopenraw (raw loader op)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ cairo, pango (text source op)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ avcodec, avformat (ff-load and experimental ff-save)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ librsvg (svg loader)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
• Documentation (this document)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
□ asciidoc
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Compiling
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
To build GEGL type the following in the toplevel source directory:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
$ ./configure # or: ./autogen.sh if building from git
|
|
Packit |
bc1512 |
$ make
|
|
Packit |
bc1512 |
$ sudo make install
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Documentation
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
With GEGL you chain together image processing operations represented by
|
|
Packit |
bc1512 |
nodes into a graph. GEGL provides such operations for loading and
|
|
Packit |
bc1512 |
storing images, adjusting colors, filtering in different ways,
|
|
Packit |
bc1512 |
transforming and compositing images.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL’s programmer/user interface is a Directed Acyclic Graph of nodes.
|
|
Packit |
bc1512 |
The DAG expresses a processing chain of operations. A DAG, or any node
|
|
Packit |
bc1512 |
in it, expresses a composited and processed image. It is possible to
|
|
Packit |
bc1512 |
request rectangular regions in a wide range of pixel formats from any
|
|
Packit |
bc1512 |
node.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Development
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
This howto describes good-to-know things for developing gegl
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Public API
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The public API reference documents the API used for creating things
|
|
Packit |
bc1512 |
with GEGL, this API does not change much at all and is also the API
|
|
Packit |
bc1512 |
provided by language bindings. To make the public API available when
|
|
Packit |
bc1512 |
compiling a .c file add #include <gegl.h>, compile and link with the
|
|
Packit |
bc1512 |
flags provided by pkg-config and you should be all set. When you are
|
|
Packit |
bc1512 |
comfortable with the public API, or are using GEGL in some project
|
|
Packit |
bc1512 |
looking at the Operation reference might be useful.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The public API also includes GeglBuffer, a flexible tiled and linear
|
|
Packit |
bc1512 |
raster buffer storage system.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Bindings
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The bindings for use of GEGL in other programming languages than C are
|
|
Packit |
bc1512 |
co-hosted with GEGL in GNOME git but are not part of the regular GEGL
|
|
Packit |
bc1512 |
distribution. The following language bindings are currently available:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
vala, C#, Python and Ruby.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Hello world
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The following is a small sample GEGL application that animates a zoom
|
|
Packit |
bc1512 |
on a mandelbrot fractal. compile it with:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
$ gcc hello-world.c `pkg-config --libs --cflags gegl` -o hello-world
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
This example and others can be found in the examples subdir of the GEGL
|
|
Packit |
bc1512 |
distribution.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
#include <gegl.h>
|
|
Packit |
bc1512 |
#include <glib/gprintf.h>
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gint
|
|
Packit |
bc1512 |
main (gint argc,
|
|
Packit |
bc1512 |
gchar **argv)
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
g_thread_init (NULL);
|
|
Packit |
bc1512 |
gegl_init (&argc, &argv); /* initialize the GEGL library */
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
/* instantiate a graph */
|
|
Packit |
bc1512 |
GeglNode *gegl = gegl_node_new ();
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/*
|
|
Packit |
bc1512 |
This is the graph we're going to construct:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
.-----------.
|
|
Packit |
bc1512 |
| display |
|
|
Packit |
bc1512 |
`-----------'
|
|
Packit |
bc1512 |
|
|
|
Packit |
bc1512 |
.-------.
|
|
Packit |
bc1512 |
| over |
|
|
Packit |
bc1512 |
`-------'
|
|
Packit |
bc1512 |
| \
|
|
Packit |
bc1512 |
| \
|
|
Packit |
bc1512 |
| \
|
|
Packit |
bc1512 |
| |
|
|
Packit |
bc1512 |
| .------.
|
|
Packit |
bc1512 |
| | text |
|
|
Packit |
bc1512 |
| `------'
|
|
Packit |
bc1512 |
.------------------.
|
|
Packit |
bc1512 |
| fractal-explorer |
|
|
Packit |
bc1512 |
`------------------'
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
*/
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/*< The image nodes representing operations we want to perform */
|
|
Packit |
bc1512 |
GeglNode *display = gegl_node_create_child (gegl, "gegl:display");
|
|
Packit |
bc1512 |
GeglNode *over = gegl_node_new_child (gegl,
|
|
Packit |
bc1512 |
"operation", "gegl:over",
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
GeglNode *text = gegl_node_new_child (gegl,
|
|
Packit |
bc1512 |
"operation", "gegl:text",
|
|
Packit |
bc1512 |
"size", 10.0,
|
|
Packit |
bc1512 |
"color", gegl_color_new ("rgb(1.0,1.0,1.0)"),
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
GeglNode *mandelbrot = gegl_node_new_child (gegl,
|
|
Packit |
bc1512 |
"operation", "gegl:fractal-explorer",
|
|
Packit |
bc1512 |
"width", 512,
|
|
Packit |
bc1512 |
"height", 384,
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl_node_link_many (mandelbrot, over, display, NULL);
|
|
Packit |
bc1512 |
gegl_node_connect_to (text, "output", over, "aux");
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* request that the save node is processed, all dependencies will
|
|
Packit |
bc1512 |
* be processed as well
|
|
Packit |
bc1512 |
*/
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
gint frame;
|
|
Packit |
bc1512 |
gint frames = 200;
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
for (frame=0; frame
|
|
Packit |
bc1512 |
{
|
|
Packit |
bc1512 |
gchar string[512];
|
|
Packit |
bc1512 |
gdouble t = frame * 1.0/frames;
|
|
Packit |
bc1512 |
gdouble cx = -1.76;
|
|
Packit |
bc1512 |
gdouble cy = 0.0;
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
#define INTERPOLATE(min,max) ((max)*(t)+(min)*(1.0-t))
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gdouble xmin = INTERPOLATE( cx-0.02, cx-2.5);
|
|
Packit |
bc1512 |
gdouble ymin = INTERPOLATE( cy-0.02, cy-2.5);
|
|
Packit |
bc1512 |
gdouble xmax = INTERPOLATE( cx+0.02, cx+2.5);
|
|
Packit |
bc1512 |
gdouble ymax = INTERPOLATE( cy+0.02, cy+2.5);
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
if (xmin<-3.0)
|
|
Packit |
bc1512 |
xmin=-3.0;
|
|
Packit |
bc1512 |
if (ymin<-3.0)
|
|
Packit |
bc1512 |
ymin=-3.0;
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl_node_set (mandelbrot, "xmin", xmin,
|
|
Packit |
bc1512 |
"ymin", ymin,
|
|
Packit |
bc1512 |
"xmax", xmax,
|
|
Packit |
bc1512 |
"ymax", ymax,
|
|
Packit |
bc1512 |
NULL);
|
|
Packit |
bc1512 |
g_sprintf (string, "%1.3f,%1.3f %1.3f×%1.3f",
|
|
Packit |
bc1512 |
xmin, ymin, xmax-xmin, ymax-ymin);
|
|
Packit |
bc1512 |
gegl_node_set (text, "string", string, NULL);
|
|
Packit |
bc1512 |
gegl_node_process (display);
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* free resources used by the graph and the nodes it owns */
|
|
Packit |
bc1512 |
g_object_unref (gegl);
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
/* free resources globally used by GEGL */
|
|
Packit |
bc1512 |
gegl_exit ();
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
return 0;
|
|
Packit |
bc1512 |
}
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Operation API
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
An API to extend the functionality of GEGL with new image processing
|
|
Packit |
bc1512 |
primitive, file loaders, export formats or similar.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Each GEGL operation is defined in a .c file that gets turned into a
|
|
Packit |
bc1512 |
single shared object that is loaded. Each operation is a subclass of
|
|
Packit |
bc1512 |
one of the provided base classes:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperation
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The base operation class, which all the other base classes are
|
|
Packit |
bc1512 |
derived from, deriving from this is often quite a bit of work and
|
|
Packit |
bc1512 |
is encouraged only when your operation doesn’t fit into any of the
|
|
Packit |
bc1512 |
other categories
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationFilter
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The filter base class sets up GeglBuffers for input and output pads
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationPointFilter
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The point-filter base class is for filters where an output pixel
|
|
Packit |
bc1512 |
only depends on the color and alpha values of the corresponding
|
|
Packit |
bc1512 |
input pixel. This allows you to do the processing on linear
|
|
Packit |
bc1512 |
buffers, in the future versions of GEGL operations implemented
|
|
Packit |
bc1512 |
using the point-filter will get speed increases due to more
|
|
Packit |
bc1512 |
intelligent processing possible in the point filter class
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationAreaFilter
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The AreaFilter base class allows defining operations where the
|
|
Packit |
bc1512 |
output data depends on a neighbourhood with an input window that
|
|
Packit |
bc1512 |
extends beyond the output window, the information about needed
|
|
Packit |
bc1512 |
extra pixels in different directions should be set up in the
|
|
Packit |
bc1512 |
prepare callback for the operation.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationComposer
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Composer operations are operations that take two inputs named input
|
|
Packit |
bc1512 |
and aux and write their output to the output pad output
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationPointComposer
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
A baseclass for composer functions where the output pixels' values
|
|
Packit |
bc1512 |
depends only on the values of the single corresponding input and
|
|
Packit |
bc1512 |
aux pixels.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationSource
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Operations used as render sources or file loaders, the process
|
|
Packit |
bc1512 |
method receives a GeglBuffer to write it’s output into
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationPointRender
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The point-render base class is a specialized source operation,
|
|
Packit |
bc1512 |
where the render is done in small piece to lower the need to do
|
|
Packit |
bc1512 |
copies. It’s dedicated to operation which may be rendered in
|
|
Packit |
bc1512 |
pieces, like pattern generation.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationSink
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
An operation that consumes a GeglBuffer, used for filewriters,
|
|
Packit |
bc1512 |
display (for the sdl display node)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationTemporal
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Base class for operations that want access to previous frames in a
|
|
Packit |
bc1512 |
video sequence, it contains API to configure the amounts of frames
|
|
Packit |
bc1512 |
to store as well as getting a GeglBuffer pointing to any of the
|
|
Packit |
bc1512 |
previously stored frames.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GeglOperationMeta
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Used for GEGL operations that are implemented as a sub-graph, at
|
|
Packit |
bc1512 |
the moment these are defined as C files but should in the future be
|
|
Packit |
bc1512 |
possible to declare as XML instead.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
To create your own operations you should start by looking for one that
|
|
Packit |
bc1512 |
does approximatly what you already need. Copy it to a new .c source
|
|
Packit |
bc1512 |
file, and replace the occurences of the filename (operation name in the
|
|
Packit |
bc1512 |
source.)
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Take a look at the brightness contrast operation for a point operation
|
|
Packit |
bc1512 |
well sprinkled with comments as a starting point.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Environment
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Some environment variables can be set to alter how GEGL runs, all of
|
|
Packit |
bc1512 |
these options are also available as properties on a singleton GObject
|
|
Packit |
bc1512 |
returned from gegl_config ().
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_QUALITY
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
A value between 0.0 and 1.0 indicating a trade-off between quality
|
|
Packit |
bc1512 |
and speed. Defaults to 1.0 (max quality).
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
BABL_TOLERANCE
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The amount of error that babl tolerates, set it to for instance 0.1
|
|
Packit |
bc1512 |
to use some conversions that trade some quality for speed.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_CHUNK_SIZE
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The number of pixels processed simulatnously.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_TILE_SIZE
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The tile size used internally by GEGL, defaults to 128x64
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_SWAP
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The directory where temporary swap files are written, if not
|
|
Packit |
bc1512 |
specified GEGL will not swap to disk. Be aware that swapping to
|
|
Packit |
bc1512 |
disk is still experimental and GEGL is currently not removing the
|
|
Packit |
bc1512 |
per process swap files.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_CACHE_SIZE
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The size of the tile cache used by GeglBuffer specified in
|
|
Packit |
bc1512 |
megabytes.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_DEBUG
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
set it to "all" to enable all debugging, more specific domains for
|
|
Packit |
bc1512 |
debugging information are also available.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
BABL_STATS
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
When set babl will write a html file (/tmp/babl-stats.html)
|
|
Packit |
bc1512 |
containing a matrix of used conversions, as well as all existing
|
|
Packit |
bc1512 |
conversions and which optimized paths are followed.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_DEBUG_BUFS
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Display tile/buffer leakage statistics.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_DEBUG_RECTS
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Show the results of have/need rect negotiations.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL_DEBUG_TIME
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Print a performance instrumentation breakdown of GEGL and it’s
|
|
Packit |
bc1512 |
operations. GEGL_USE_OPENCL: Enable use of OpenCL processing.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL provides a commandline tool called gegl, for working with the XML
|
|
Packit |
bc1512 |
data model from file, stdin or the commandline. It can display the
|
|
Packit |
bc1512 |
result of processing the layer tree or save it to file.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Some examples:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Render a composition to a PNG file:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
$ gegl composition.xml -o composition.png
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Invoke gegl like a viewer for gegl compositions:
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
$ gegl -ui -d 5 composition.xml
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Using gegl with png’s passing through stdin/stdout piping.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
$ cat input.png | gegl -o - -x "<gegl>
|
|
Packit |
bc1512 |
<tree>
|
|
Packit |
bc1512 |
<node class='invert'/>
|
|
Packit |
bc1512 |
<node class='scale' x='0.5' y='0.5'/>
|
|
Packit |
bc1512 |
<node class='png-load' path='-'/></tree></gegl>" > output.png
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The latest development version is available in the gegl repository in
|
|
Packit |
bc1512 |
GNOME git.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl usage
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The following is the usage information of the gegl binary, this
|
|
Packit |
bc1512 |
documentation might not be complete.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
usage: /home/pippin/src/gegl/bin/.libs/lt-gegl [options] <file | -- [op [op] ..]>
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Options:
|
|
Packit |
bc1512 |
-h, --help this help information
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
-i, --file read xml from named file
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
-x, --xml use xml provided in next argument
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
--dot output a graphviz graph description
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
-o, --output output generated image to named file, type based
|
|
Packit |
bc1512 |
on extension.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
-p increment frame counters of various elements when
|
|
Packit |
bc1512 |
processing is done.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
-X output the XML that was read in
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
-v, --verbose print diagnostics while running
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
All parameters following -- are considered ops to be chained together
|
|
Packit |
bc1512 |
into a small composition instead of using an xml file, this allows for
|
|
Packit |
bc1512 |
easy testing of filters. Be aware that the default value will be used
|
|
Packit |
bc1512 |
for all properties.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Appendixes
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Operations
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The main source of documentation as GEGL grows is the operations
|
|
Packit |
bc1512 |
reference. Plug-ins themselves register information about the
|
|
Packit |
bc1512 |
categories they belong to, what they do, and documentation of the
|
|
Packit |
bc1512 |
available parameters.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Glossary
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
connection
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
A link/pipe routing image flow between operations within the graph
|
|
Packit |
bc1512 |
goes from an output pad to an input pad, in graph glossary this
|
|
Packit |
bc1512 |
might also be referred to as an edge.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
DAG
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Directed Acyclic Graph, see graph.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
graph
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
A composition of nodes, the graph is a DAG.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
node
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The nodes are connected in the graph. A node has an associated
|
|
Packit |
bc1512 |
operation or can be constructed graph.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
operation
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The processing primitive of GEGL, is where the actual image
|
|
Packit |
bc1512 |
processing takes place. Operations are plug-ins and provide the
|
|
Packit |
bc1512 |
actual functionality of GEGL
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
pad
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
The part of a node that exchanges image content. The place where
|
|
Packit |
bc1512 |
image "pipes" are used to connect the various operations in the
|
|
Packit |
bc1512 |
composition.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
input pad
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
consumes image data, might also be seen as an image parameter to
|
|
Packit |
bc1512 |
the operation.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
output pad
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
a place where data can be requested, multiple input pads can
|
|
Packit |
bc1512 |
reference the same output pad.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
property
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Properties are what controls the behavior of operations. Through
|
|
Packit |
bc1512 |
the use of GParamSpecs properties they are self documenting via
|
|
Packit |
bc1512 |
introspection.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Directory overview
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
GEGL dirs
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Directories marked with ⊙ use GNU make extensions to include any .c
|
|
Packit |
bc1512 |
file dropped into the directory in the build.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
gegl-dist-root
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
├──gegl core source of GEGL, library init/deinit,
|
|
Packit |
bc1512 |
│ │
|
|
Packit |
bc1512 |
│ ├──buffer contains the implementation of GeglBuffer
|
|
Packit |
bc1512 |
│ │ - sparse (tiled)
|
|
Packit |
bc1512 |
│ │ - recursivly subbuffer extendable
|
|
Packit |
bc1512 |
│ │ - clipping rectangle (defaults to bounds when making
|
|
Packit |
bc1512 |
│ │ subbuffers)
|
|
Packit |
bc1512 |
│ │ - storage in any babl supported pixel format
|
|
Packit |
bc1512 |
│ │ - read/write rectangular region as linear buffer for
|
|
Packit |
bc1512 |
│ │ any babl supported pixel format.
|
|
Packit |
bc1512 |
│ ├──graph graph storage and manipulation code.
|
|
Packit |
bc1512 |
│ ├──module The code to load plug-ins located in a colon seperated
|
|
Packit |
bc1512 |
│ │ list of paths from the environment variable GEGL_PATH
|
|
Packit |
bc1512 |
│ ├──operation The GeglOperation base class, and subclasses that act
|
|
Packit |
bc1512 |
│ │ as baseclasses for implementeting different types of
|
|
Packit |
bc1512 |
│ │ operation plug-ins.
|
|
Packit |
bc1512 |
│ ├──process The code controlling data processing.
|
|
Packit |
bc1512 |
│ └──property-types specialized classes/paramspecs for GeglOperation
|
|
Packit |
bc1512 |
│ properties.
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
├──examples ⊙ hello-world and other example uses of the GEGL API.
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
├──tests various tests used to maintain stability when developing
|
|
Packit |
bc1512 |
│ GEGL.
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
├──operations Runtime loaded plug-ins for image processing operations.
|
|
Packit |
bc1512 |
│ │
|
|
Packit |
bc1512 |
│ ├──core ⊙ Basic operations tightly coupled with GEGL.
|
|
Packit |
bc1512 |
│ ├──affine Transforming operations (rotate/scale/translate)
|
|
Packit |
bc1512 |
│ ├──generated ⊙ Operations generated from scripts (currently
|
|
Packit |
bc1512 |
│ ├──external Operations with external dependencies.
|
|
Packit |
bc1512 |
│ ├──common ⊙ Other operations.
|
|
Packit |
bc1512 |
│ └──workshop ⊙ Works in progress, (you must pass --enable-workshop
|
|
Packit |
bc1512 |
│ │ when configurig to build these by default, you can enter
|
|
Packit |
bc1512 |
│ │ the directory manually and type make && sudo make install
|
|
Packit |
bc1512 |
│ │ as well.
|
|
Packit |
bc1512 |
│ │
|
|
Packit |
bc1512 |
│ ├──external operations in the workshop with external dependencies.
|
|
Packit |
bc1512 |
│ └──generated generated operations that are in the workshop.
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
├──docs The GEGL website (this documentation), built for your
|
|
Packit |
bc1512 |
│ │ the corresponding sourcetree with correct documentation
|
|
Packit |
bc1512 |
│ │ etc.
|
|
Packit |
bc1512 |
│ │
|
|
Packit |
bc1512 |
│ └──gallery ⊙ A gallery of sample GEGL compositions, using the
|
|
Packit |
bc1512 |
│ │ (not yet stabilized) XML format.
|
|
Packit |
bc1512 |
│ │
|
|
Packit |
bc1512 |
│ └──data Image data used by the sample compositions.
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
├──bin gegl binary, for processing XML compositions to png files.
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
├──bindings bindings for using GEGL from other programming languages
|
|
Packit |
bc1512 |
│ not included in the tarball distribution but exist in
|
|
Packit |
bc1512 |
│ the git repository.
|
|
Packit |
bc1512 |
│
|
|
Packit |
bc1512 |
└──tools some small utilities to help the build.
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
Table of Contents
|
|
Packit |
bc1512 |
GEGL
|
|
Packit |
bc1512 |
Features
|
|
Packit |
bc1512 |
News
|
|
Packit |
bc1512 |
Gallery
|
|
Packit |
bc1512 |
Copyright
|
|
Packit |
bc1512 |
Contributors
|
|
Packit |
bc1512 |
Todo
|
|
Packit |
bc1512 |
Building from source
|
|
Packit |
bc1512 |
Download
|
|
Packit |
bc1512 |
Dependencies
|
|
Packit |
bc1512 |
Compiling
|
|
Packit |
bc1512 |
Developer notes
|
|
Packit |
bc1512 |
Documentation
|
|
Packit |
bc1512 |
Operations
|
|
Packit |
bc1512 |
Public API
|
|
Packit |
bc1512 |
Operation API
|
|
Packit |
bc1512 |
Environment
|
|
Packit |
bc1512 |
gegl
|
|
Packit |
bc1512 |
Appendixes
|
|
Packit |
bc1512 |
Operations
|
|
Packit |
bc1512 |
Glossary
|
|
Packit |
bc1512 |
Directory overview
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
|
|
Packit |
bc1512 |
changes
|
|
Packit |
bc1512 |
bugzilla
|
|
Packit |
bc1512 |
mailarchive
|
|
Packit |
bc1512 |
browse online
|
|
Packit |
bc1512 |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
Packit |
bc1512 |
Last updated 2012-04-02 22:57:15 BST
|