I hope you don't mind that I reply to the list also - this might also
be interesting to others.

Daniel Carrera ([EMAIL PROTECTED]) wrote:
> On Sat, Mar 29, 2003 at 03:54:24AM +0100, Simon Budig wrote:
> > > What is a PDB function?  Is that what people use to make bindings?
> > 
> > Yes, and to write plugins etc - except that some plugin-authors are
> > probably not aware of that fact. Gimp maintains a Procedural DataBase
> > with various functions. Libgimp has some functions to access this
> > Databasea (search, execute) plus a lot of wrappers around this
> > functions. Basically for a language binding you have to use these
> > pdb-access functions to map the pdb functions into the target language.
> > 
> > http://developer.gimp.org/api/1.3/libgimp/libgimp-gimpproceduraldb.html
> I've read this page, but I don't feel any closer to understanding this.
> What is a procedural database?  Why would I want to touch it when I'm 
> trying to make language bindings?

For a short explantation of the PDB have a look at

> Shouldn't I try to make bindings around all the other libgimp functions, 
> like gimp_image_scale() or things like that?

The point is, that this is not necessary. If you look at the libgimp
implementation of gimp_image_scale() you'll see that it is a short
wrapper around a PDB call:

    gimp_image_scale (gint32 image_ID,
                      gint   new_width,
                      gint   new_height)
      GimpParam *return_vals;
      gint nreturn_vals;
      gboolean success = TRUE;

      return_vals = gimp_run_procedure ("gimp_image_scale",
                                        GIMP_PDB_IMAGE, image_ID,
                                        GIMP_PDB_INT32, new_width,
                                        GIMP_PDB_INT32, new_height,

      success = return_vals[0].data.d_status == GIMP_PDB_SUCCESS;

      gimp_destroy_params (return_vals, nreturn_vals);

      return success;

Most libgimp functions look exactly this way. So, if you want to look at
it this way the libgimp is (except the PDB-access stuff) basically a
C-binding. Bindings for other languages don't need to use
gimp_image_scale() from libgimp, they can use their wrapper around
gimp_run_procedure directly. IIRC the Perl bindings don't have fixed
wrappers around all PDB functions. They dynamically search the PDB with
some heuristics if a function gets called. This has the advantage that
it can provide bindings to PDB functions the author (of the binding) at
the time of writing did not know about.

> I don't understand how PDB relates to the rest of Gimp.

Basically the PDB *is* the GIMP. Ok, this is not exactly true, but as
far as plugins and bindings it is. You cannot access image manipulation
functions that are not entered in the PDB - fortunately most
functionality is available via the PDB.

> Thank you for your help.

I hope this helps.


      [EMAIL PROTECTED]       http://www.home.unix-ag.org/simon/
Gimp-developer mailing list

Reply via email to