These functions are declared in the following header file:

#include <allegro5/allegro_opengl.h>


ALLEGRO_OGL_EXT_LIST *al_get_opengl_extension_list(void)

Returns the list of OpenGL extensions supported by Allegro, for the given display.

Allegro will keep information about all extensions it knows about in a structure returned by al_get_opengl_extension_list.

For example:

if (al_get_opengl_extension_list()->ALLEGRO_GL_ARB_multitexture) {
    use it

The extension will be set to true if available for the given display and false otherwise. This means to use the definitions and functions from an OpenGL extension, all you need to do is to check for it as above at run time, after acquiring the OpenGL display from Allegro.

Under Windows, this will also work with WGL extensions, and under Unix with GLX extensions.

In case you want to manually check for extensions and load function pointers yourself (say, in case the Allegro developers did not include it yet), you can use the al_have_opengl_extension and al_get_opengl_proc_address functions instead.


void *al_get_opengl_proc_address(const char *name)

Helper to get the address of an OpenGL symbol


How to get the function glMultiTexCoord3fARB that comes with ARB's Multitexture extension:

// define the type of the function
      (GLenum, GLfloat, GLfloat, GLfloat));
// declare the function pointer
   MULTI_TEX_FUNC glMultiTexCoord3fARB;
// get the address of the function
   glMultiTexCoord3fARB = (MULTI_TEX_FUNC) al_get_opengl_proc_address(

If glMultiTexCoord3fARB is not NULL then it can be used as if it has been defined in the OpenGL core library.

Note: Under Windows, OpenGL functions may need a special calling convention, so it's best to always use the ALLEGRO_DEFINE_PROC_TYPE macro when declaring function pointer types for OpenGL functions.


name - The name of the symbol you want to link to.

Return value:

A pointer to the symbol if available or NULL otherwise.


GLuint al_get_opengl_texture(ALLEGRO_BITMAP *bitmap)

Returns the OpenGL texture id internally used by the given bitmap if it uses one, else 0.


bitmap = al_load_bitmap("my_texture.png");
texture = al_get_opengl_texture(bitmap);
if (texture != 0)
    glBindTexture(GL_TEXTURE_2D, texture);


void al_get_opengl_texture_size(ALLEGRO_BITMAP *bitmap, int *w, int *h)

Retrieves the size of the texture used for the bitmap. This can be different from the bitmap size if OpenGL only supports power-of-two sizes or if it is a sub-bitmap.


void al_get_opengl_texture_position(ALLEGRO_BITMAP *bitmap, int *u, int *v)

Returns the u/v coordinates for the top/left corner of the bitmap within the used texture, in pixels.


GLuint al_get_opengl_fbo(ALLEGRO_BITMAP *bitmap)

Returns the OpenGL FBO id internally used by the given bitmap if it uses one, else 0. An FBO is created for a bitmap when you call al_set_target_bitmap for it.


void al_remove_opengl_fbo(ALLEGRO_BITMAP *bitmap)

If the bitmap has an OpenGL FBO created for it (see al_set_target_bitmap), it is freed. It also is freed automatically when the bitmap is destroyed.


int al_have_opengl_extension(const char *extension)

This function is a helper to determine whether an OpenGL extension is available on the given display or not.


int packedpixels = al_have_opengl_extension("GL_EXT_packed_pixels");

If packedpixels is TRUE then you can safely use the constants related to the packed pixels extension.


extension - The name of the extension that is needed

Return value:

TRUE if the extension is available FALSE otherwise.


float al_get_opengl_version(void)

Returns the OpenGL version number of the client (the computer the program is running on), for the current DISPLAY. "1.0" is returned as 1.0, "1.2.1" is returned as 1.21, and "1.2.2" as 1.22, etc.

A valid OpenGL context must exist for this function to work, which means you may not call it before al_create_display.


void al_set_current_opengl_context(ALLEGRO_DISPLAY *display)

Make the OpenGL context associated with the given display current for the calling thread. If there is a current target bitmap which belongs to a different OpenGL context, the target bitmap will be changed to NULL.

Normally you do not need to use this function, as the context will be made current when you call al_set_target_bitmap or al_set_target_backbuffer. You might need if it you created an OpenGL "forward compatible" context. Then al_get_backbuffer only returns NULL, so it would not work to pass that to al_set_target_bitmap.

OpenGL configuration

You can disable the detection of any OpenGL extension by Allegro with a section like this in allegro5.cfg:


Any extension which appears in the section is treated as not available (it does not matter if you set it to 0 or any other value).

Allegro version 4.9.22 (WIP) - Last updated: 2010-09-26 11:48:26 UTC