OpenGLEAN User Support
Home page | Introduction | Documentation | Files | Examples | Proposals | Authors | Links

OpenGLEAN Device Support Development
Summary | CVS | (discussion via home page) | (contact via home page) | (suggestion box) | License | Todo | Bugs

OpenGLEAN's gleandev Project

0.6 development

gleandev - The joy of gleaning.


gleandev joystick demo


OpenGLEAN is an open source project to enhance the GLUT API. gleandev is a natural step in that process: A major focus of OpenGLEAN is to reduce the weight of the core API by splitting off or deleting features that are unrelated or ill-conceived. The joystick API as GLUT originally defined it is one such feature---along with which can fairly naturally go the various other non-mouse, non-keyboard devices that GLUT has traditionally supported.

gleandev takes up the reins for the non-standard devices. Most of the devices were not implemented in the codebase, freeglut via OpenGLUT, from which OpenGLEAN derives, so primarily the support is centering around the joystick API. In gleandev, the pseudo-event approach that GLUT took to handling these devices is discarded in favor of direct polling---this simplifies the library and provides the client with a behavior pattern closer to what is truly happening with the hardware.


Part of the GLUT family

Why gleandev?

In mid 2003, the principle author of OpenGLEAN encountered a serious, crashing bug with GLUT. This was motivation to look for alternatives. Soon after, the author was working on freeglut to enhance its GLUT compatibility. However, as the author sought to advance the API, not merely kill off and replace old GLUT, the author eventually was asked to help co-found the OpenGLUT project. That project made some significant advances, but it was not possible to reach consensus about removing legacy features from OpenGLUT. As that was the author's primary reason for creating a fork, the author butted heads with the other co-founder and eventually had to choose between abandoning one of the most important points of the fork, having ugly and unending arguments, or forking the codebase yet again.

The result was to create the OpenGLEAN project. The intent was to quickly reorient the new project, fix some open issues, and remove the legacy features. As one may expect, however, this progress was not as quick as one may wish.

One of the key aspects to separate from OpenGLEAN is the pseudo-event device-polling that GLUT provided for devices ranging from joysticks to graphics tablets. The device support in OpenGLEAN resulted in bloat as well as complications to essentially unrelated code. E.g., the event loop needed to set aside a step to check if any windows had any joystick callbacks registered; since joysticks were polled (internally) by the library, that would alter the way that OpenGLEAN would sleep.

There was no reason that the exact GLUT API could not have been done by completely separate code, using GLUT timers. In fact, that was contemplated as part of the gleandev library (at the time aiming to be called "gleanjoy"). That may eventually be done, yet, but on reflection even that is more complication than is really needed. Very few, if any, real applications would find the GLUT API any easier than a more direct gleandevGet*() API---other, of course, than those applications already using the old GLUT API and hence needing some simple conversion. Meanwhile, implementing, testing, debugging, and enhancing the library would be complicated, as in some cases would be client debugging, to recreate the GLUT API.

While contemplating this, the remaining devices were recognized as having the same characteristics as the joystick devices. The only difference being that, as OpenGLEAN starts from the freeglut base, OpenGLEAN has joystick support but no support for other devices.


At this point, the library is still taking fairly large evolutionary steps. However, the GLUT device support can be considered not to have advanced at all since GLUT stopped supporting it, until now. gleandev offers these enhancements:

(The second and third points are features of the way that the API is outlined, though support is still developing. The last fourth and fifth points are features of the fact that gleandev is willing to grow and is a living project.)


In addition, some API proposals are on the table: OpenGLEAN API Proposals.

Using OpenGLEAN


Detailed API and example documentation is available from the SourceForge project interface for OpenGLEAN.


Currently, development releases are made from time to time. See the gleandev file download section, e.g., at the OpenGLEAN SourceForge interface.


The current development version of gleandev is under some degree of flux. It is not source-compatible with the device APIs for other GLUT family members.

Input (no pun intended) is especially welcome to this sub-project. For the right mix of ability and interest, the project could be spun off entirely to a separate project under separate project management.


The core OpenGLEAN is maintained in a private CVS tree; the satellite libraries are being set up in their own CVS trees, however, on the OpenGLEAN SourceForge CVS server. Logo Supported in part by

Generated on Fri Sep 9 18:01:30 2005 for gleandev by doxygen 1.4.3
The OpenGLEAN project is hosted in part by SourceForge.