This project is intended to bring a common interface for high-end and low-end
stereo viewing devices, and to make stereo 3D programming easier for both
types. It will be designed to support OpenGL-based graphics, with as much
cross-platform support as possible.
There are four general types of OpenGL-based stereo viewing systems
The StereoGL project will allow people to do proper OpenGL stereo programming,
and be able to run that program on any hardware, including a simple red/blue
anaglyph view if that is all that is available. StereoGL will also be useful
for adapting standard stereo applications to custom display hardware, such
as using separate screens for left and right views.
Hardware with stereo supported by OpenGL, used by applications that
know about stereo. This is the ideal situation, and all systems will
hopefully work this way someday. This type of application may benefit from
StereoGL by having support for stereo setup (like video-mode selection),
utilities for calculating left/right view transforms, and ability to use
common user-preferences for stereo. These types of tools are not ready
Hardware without OpenGL stereo support, used by software that doesn't
know about stereo. These are the newer low-cost stereo devices targeting
consumers, mostly 3D games. They work by using library wrappers that intercept
the 3D information sent to OpenGL by the application, convert it to left
& right views, and display it as needed to work with the stereo hardware.
These drivers mostly do not work for applications that know about stereo,
which causes a lot of confusion for people trying to use them with true
Hardware without OpenGL support, with software that knows how to directly
produce stereo for a given system. This usually applies to using
a low-cost stereo device like the ones in #2. This used to be the only
way to get stereo on Linux, which is why I got interested in this project.
This suffers from the problem that all software needs to know about all
hardware, causing a lot of incompatibilities and redundant coding efforts.
Simulated OpenGL stereo support, for software that knows about
stereo. This approach allows you to use real stereo applications (as
in #1) on low cost hardware (as in #2) without the app having to do all
the work (as in #3). This is how StereoGL works.
There are so many ways to design such a project that it has been slow
to converge on a good design. I have also found that it is hard to get
design feedback until you release some testable source code. The current
design is to wrap the entire libGL.so. Most of the work occurs in just
a few commands, but wrapping the entire library will allow us to track
and duplicate drawing commands for left and right views for autogenerated
In addition to wrapping OpenGL commands, glX and/or GLUT commands
must be wrapped for handling window management and framebuffer selection.
We are currently focusing on GLUT wrappers, because GLUT apps
are much easier to handle. We are also working on glX wrappers, but this
will require more debugging due to the larger variety of programming methods
Here are some considerations and
discussion on my ideas for the stereoGL library, and stereo rendering techniques.
Here are a few links to more
resources on stereo displays.
Licensing: The code will be released as LGPL so
that it will be useable by proprietary applications, but adding support
for hardware will require adding open-source code.
page last updated 27 Mar 2002 by Joe