OpenGL::Modern - Perl extension to Modern OpenGL API up to 4.5


  use OpenGL::Modern qw(:all);
  use OpenGL qw(:glutfunctions :glutconstants);  # for GLUT


OpenGL::Modern provides perl bindings to the OpenGL graphics APIs using the OpenGL Extension Wrangler (GLEW) library. These bindings were largely generated by parsing the GLEW include file, glew.h.

This module updates the original Perl OpenGL bindings OpenGL (often abbreviated as POGL) to include support for all OpenGL API from 1.0 through 4.5. The "modern" OpenGL APIs are those starting with version 3.1 and higher.

OpenGL 3.1 was the first version where the legacy OpenGL functionality from versions 1.x-3.0 was fully deprecated. Much of the functionality that used to be accessed via the extension mechanism in OpenGL now is standardized and in the OpenGL Core APIs.


The module OpenGL::Image was written for the original, however it can be made to work seamlessly with OpenGL::Modern. Where-as you previously loaded it like this:

    use OpenGL::Image;             # loads on its own

You can prepend two use lines, and get this:

    use OpenGL::Array;             # not part of OpenGL::Modern
    use OpenGL::Modern::ImageHack; # sets up a fake OpenGL namespace
    use OpenGL::Image;             # now safe to do, won't load


None by default.


OpenGL 4.x documentation at

Perl OpenGL (POGL) and Perl OpenGL::Modern (POGL2) development share common resources. At some point OpenGL::Modern will replace the legacy OpenGL implementation. Together they are referred to as POGL.

Perl OpenGL developer and users lists are at

Perl OpenGL IRC is at #pogl on

POGL2 development will take place on github and the repository is being set up there. The repository will be the official release repository and is mirrored from github.


Chris Marshall, < devel dot chm dot 01 AT gmail dot com >


This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.22.0 or, at your option, any later version of Perl 5 you may have available.

  Copyright (C) 2017 by Chris Marshall
  Copyright (C) 2016 by Max Maischein