## OpenGL-Capable Widget

OpenGL-Capable Widget — OpenGL extension to GtkWidget API

## Synopsis

    #include <gtk/gtkgl.h>

    gboolean    gtk_widget_set_gl_capability    (GtkWidget *widget,
                                                 GdkGLConfig *glconfig,
                                                 GdkGLContext *share_list,
                                                 gboolean direct,
                                                 int render_type);
    gboolean    gtk_widget_is_gl_capable        (GtkWidget *widget);
    GdkGLConfig* gtk_widget_get_gl_config       (GtkWidget *widget);
    GdkGLContext* gtk_widget_create_gl_context  (GtkWidget *widget,
                                                 GdkGLContext *share_list,
                                                 gboolean direct,
                                                 int render_type);
    GdkGLContext* gtk_widget_get_gl_context     (GtkWidget *widget);
    GdkGLWindow* gtk_widget_get_gl_window       (GtkWidget *widget);
    #define     gtk_widget_get_gl_drawable      (widget)

## Description

GtkGLExt is an extension to GTK which adds OpenGL capabilities to GtkWidget. Its use is quite simple: use gtk_widget_set_gl_capability to add OpenGL support to a widget, it will create a OpenGL drawable (GdkGLDrawable) for the widget, which can be obtained via gtk_widget_get_gl_drawable. OpenGL rendering context (GdkGLContext) can also be obtained via gtk_widget_get_gl_context. With GdkGLDrawable and GdkGLContext, gdk_gl_drawable_gl_begin and gdk_gl_drawable_gl_end can be called, and OpenGL function calls can be made between those two functions.

## Details

### gtk_widget_set_gl_capability ()

    gboolean    gtk_widget_set_gl_capability    (GtkWidget *widget,
                                                 GdkGLConfig *glconfig,
                                                 GdkGLContext *share_list,
                                                 gboolean direct,
                                                 int render_type);

Set the OpenGL-capability to the `widget`. This function prepares the widget for its use with OpenGL.

`widget` : | the GtkWidget to be used as the rendering area.
`glconfig` : | a GdkGLConfig.
`share_list` : | the GdkGLContext with which to share display lists and texture objects. NULL indicates that no sharing is to take place.
`direct` : | whether rendering is to be done with a direct connection to the graphics system.
`render_type` : | GDK_GL_RGBA_TYPE or GDK_GL_COLOR_INDEX_TYPE (currently not used).
Returns : | TRUE if it is successful, FALSE otherwise.

### gtk_widget_is_gl_capable ()

    gboolean    gtk_widget_is_gl_capable        (GtkWidget *widget);

Returns whether the `widget` is OpenGL-capable.

`widget` : | a GtkWidget.
Returns : | TRUE if the `widget` is OpenGL-capable, FALSE otherwise.

### gtk_widget_get_gl_config ()

    GdkGLConfig* gtk_widget_get_gl_config       (GtkWidget *widget);

Returns the GdkGLConfig referred by the `widget`.

`widget` : | a GtkWidget.
Returns : | the GdkGLConfig.

### gtk_widget_create_gl_context ()

    GdkGLContext* gtk_widget_create_gl_context  (GtkWidget *widget,
                                                 GdkGLContext *share_list,
                                                 gboolean direct,
                                                 int render_type);

Creates a new GdkGLContext with the appropriate GdkGLDrawable for this widget. The GL context must be freed when you're finished with it. See also `gtk_widget_get_gl_context()`.

`widget` : | a GtkWidget.
`share_list` : | the GdkGLContext with which to share display lists and texture objects. NULL indicates that no sharing is to take place.
`direct` : | whether rendering is to be done with a direct connection to the graphics system.
`render_type` : | GDK_GL_RGBA_TYPE or GDK_GL_COLOR_INDEX_TYPE (currently not used).
Returns : | the new GdkGLContext.

### gtk_widget_get_gl_context ()

    GdkGLContext* gtk_widget_get_gl_context     (GtkWidget *widget);

Returns the GdkGLContext with the appropriate GdkGLDrawable for this widget. Unlike the GL context returned by `gtk_widget_create_gl_context()`, this context is owned by the widget.

GdkGLContext is needed for the function gdk_gl_drawable_begin, or for sharing display lists (see `gtk_widget_set_gl_capability()`).

`widget` : | a GtkWidget.
Returns : | the GdkGLContext.

### gtk_widget_get_gl_window ()

    GdkGLWindow* gtk_widget_get_gl_window       (GtkWidget *widget);

Returns the GdkGLWindow owned by the `widget`.

`widget` : | a GtkWidget.
Returns : | the GdkGLWindow.

### gtk_widget_get_gl_drawable()

    #define     gtk_widget_get_gl_drawable(widget)

Returns the GdkGLDrawable owned by the `widget`. In fact, this is macro that casts the result of gtk_widget_get_gl_window to GdkGLDrawable.

`widget` : | a GtkWidget.
Returns : | the GdkGLDrawable.