## plugins

plugins — G3DPlugin interface

## Synopsis

    #include <g3d/plugins.h>

    enum                G3DPluginType;
    gpointer            (*G3DPluginInitFunc)                (G3DContext *context);
    void                (*G3DPluginCleanupFunc)             (gpointer user_data);
    gboolean            (*G3DPluginLoadModelFunc)           (G3DContext *context,
                                                             const gchar *filename,
                                                             G3DModel *model,
                                                             gpointer user_data);
    gboolean            (*G3DPluginLoadModelFromStreamFunc) (G3DContext *context,
                                                             G3DStream *stream,
                                                             G3DModel *model,
                                                             gpointer user_data);
    gboolean            (*G3DPluginLoadImageFunc)           (G3DContext *context,
                                                             const gchar *filename,
                                                             G3DImage *image,
                                                             gpointer user_data);
    gboolean            (*G3DPluginLoadImageStreamFunc)     (G3DContext *context,
                                                             G3DStream *stream,
                                                             G3DImage *image,
                                                             gpointer user_data);
    gchar *             (*G3DPluginGetDescFunc)             (G3DContext *context);
    gchar **            (*G3DPluginGetExtFunc)              (G3DContext *context);
                        G3DPlugin;
    gboolean            g3d_plugins_init                    (G3DContext *context);
    void                g3d_plugins_cleanup                 (G3DContext *context);
    gboolean            g3d_plugins_load_model              (G3DContext *context,
                                                             const gchar *filename,
                                                             G3DModel *model);
    gboolean            g3d_plugins_load_model_from_stream  (G3DContext *context,
                                                             G3DStream *stream,
                                                             G3DModel *model);
    gboolean            g3d_plugins_load_image              (G3DContext *context,
                                                             const gchar *filename,
                                                             G3DImage *image);
    gboolean            g3d_plugins_load_image_from_stream  (G3DContext *context,
                                                             G3DStream *stream,
                                                             G3DImage *image);
    gchar **            g3d_plugins_get_image_extensions    (G3DContext *context);

## Description

Direct interaction with the plugin system is normally not needed when using libg3d. It may be required when writing a plugin which should load a G3DImage or a G3DModel with another plugin.

## Details

### enum G3DPluginType

    typedef enum {
    	G3D_PLUGIN_UNKNOWN = 0x00,
    	G3D_PLUGIN_IMPORT,
    	G3D_PLUGIN_IMAGE
    } G3DPluginType;

Type of plugin.

`G3D_PLUGIN_UNKNOWN` | unknown plugin type
`G3D_PLUGIN_IMPORT` | model import plugin
`G3D_PLUGIN_IMAGE` | image loading plugin

### G3DPluginInitFunc ()

    gpointer            (*G3DPluginInitFunc)                (G3DContext *context);

Prototype for `plugin_init()`.

`context` : | the context
Returns : | opaque plugin data.

### G3DPluginCleanupFunc ()

    void                (*G3DPluginCleanupFunc)             (gpointer user_data);

Prototype for `plugin_cleanup()`.

`user_data` : | opaque plugin data

### G3DPluginLoadModelFunc ()

    gboolean            (*G3DPluginLoadModelFunc)           (G3DContext *context,
                                                             const gchar *filename,
                                                             G3DModel *model,
                                                             gpointer user_data);

Prototype for `plugin_load_model()`.

`context` : | the context
`filename` : | file name of model
`model` : | the model structure to fill
`user_data` : | opaque plugin data
Returns : | TRUE on success, FALSE else.

### G3DPluginLoadModelFromStreamFunc ()

    gboolean            (*G3DPluginLoadModelFromStreamFunc) (G3DContext *context,
                                                             G3DStream *stream,
                                                             G3DModel *model,
                                                             gpointer user_data);

Prototype for `plugin_load_model_from_stream()`.

`context` : | the context
`stream` : | the stream to load from
`model` : | the model structure to fill
`user_data` : | opaque plugin data
Returns : | TRUE on success, FALSE else.

### G3DPluginLoadImageFunc ()

    gboolean            (*G3DPluginLoadImageFunc)           (G3DContext *context,
                                                             const gchar *filename,
                                                             G3DImage *image,
                                                             gpointer user_data);

Prototype for `plugin_load_image()`.

`context` : | the context
`filename` : | file name of image
`image` : | image structure to fill
`user_data` : | opaque plugin data
Returns : | TRUE on success, FALSE else.

### G3DPluginLoadImageStreamFunc ()

    gboolean            (*G3DPluginLoadImageStreamFunc)     (G3DContext *context,
                                                             G3DStream *stream,
                                                             G3DImage *image,
                                                             gpointer user_data);

Prototype for `plugin_load_image_from_stream()`.

`context` : | the context
`stream` : | the stream to load from
`image` : | image structure to fill
`user_data` : | opaque plugin data
Returns : | TRUE on success, FALSE else.

### G3DPluginGetDescFunc ()

    gchar *             (*G3DPluginGetDescFunc)             (G3DContext *context);

Prototype for `plugin_description()`.

`context` : | the context
Returns : | a newly-allocated string containing the description of the plugin.

### G3DPluginGetExtFunc ()

    gchar **            (*G3DPluginGetExtFunc)              (G3DContext *context);

Prototype for `plugin_extensions()`.

`context` : | the context
Returns : | NULL-terminated list of file extensions supported by this plugin. Free with `g_strfreev()`.

### G3DPlugin

    typedef struct {
    } G3DPlugin;

A libg3d plugin.

### g3d_plugins_init ()

    gboolean            g3d_plugins_init                    (G3DContext *context);

Initializes the plugin system. This is implicitly done when using `g3d_context_new()`.

`context` : | a valid G3DContext
Returns : | TRUE on success, FALSE else.

### g3d_plugins_cleanup ()

    void                g3d_plugins_cleanup                 (G3DContext *context);

Clean up the plugin system. Usually done by `g3d_context_free()`.

`context` : | a valid context

### g3d_plugins_load_model ()

    gboolean            g3d_plugins_load_model              (G3DContext *context,
                                                             const gchar *filename,
                                                             G3DModel *model);

Try to load a model from file using import plugins.

`context` : | a valid context
`filename` : | file name of model to load
`model` : | model structure to fill
Returns : | TRUE on success, FALSE else.

### g3d_plugins_load_model_from_stream ()

    gboolean            g3d_plugins_load_model_from_stream  (G3DContext *context,
                                                             G3DStream *stream,
                                                             G3DModel *model);

Try to load a model from stream using import plugins.

`context` : | a valid context
`stream` : | stream to load model from
`model` : | model structure to fill
Returns : | TRUE on success, FALSE else.

### g3d_plugins_load_image ()

    gboolean            g3d_plugins_load_image              (G3DContext *context,
                                                             const gchar *filename,
                                                             G3DImage *image);

Try to load an image from file using import plugins.

`context` : | a valid context
`filename` : | file name of image to load
`image` : | image structure to fill
Returns : | TRUE on success, FALSE else.

### g3d_plugins_load_image_from_stream ()

    gboolean            g3d_plugins_load_image_from_stream  (G3DContext *context,
                                                             G3DStream *stream,
                                                             G3DImage *image);

Try to load an image from stream using import plugins.

`context` : | a valid context
`stream` : | stream to load image from
`image` : | image structure to fill
Returns : | TRUE on success, FALSE else.

### g3d_plugins_get_image_extensions ()

    gchar **            g3d_plugins_get_image_extensions    (G3DContext *context);

Get the supported image type extensions.

`context` : | a valid context
Returns : | NULL-terminated list of image file extensions supported by this plugin. Free with `g_strfreev()`.

## See Also

G3DPlugin