Projects » Amiga OS 4 Projects » MiniGL


 A gears demo

MiniGL is not actually one of my projects, but I have spent a significant amount of time and effort on MiniGL, so it deserves a mention. MiniGL for Amiga OS was originally developed by Hans-Jörg Frieden and Thomas Frieden for Hyperion-Entertainment's game ports to the Amiga (e.g., Freespace, shogo). As such, it was designed to support the subset of the OpenGL 1.3 API that was used by these games - hence the "mini." The goal was also to make it as fast and efficient as possible, particularly as Motorola's 68K series processors were already lagging behind in processing power. 3D hardware acceleration was performed via the Warp3D library.

Want to learn how to program in OpenGL? Click here. 

I first got involved in late 2007. By this point MiniGL had been open-source for some time, and various people had asked if it were possible to add display-lists. The answer was, "of course, the source-code is open, feel free to add it." The Friedens were hard at work on Amiga OS 4.0, and thus did not have the time required to add additional features. No one else took on the task of adding display-lists, so I did it. Two to three weeks later, MiniGL version 1.5 was released, containing display-lists and various bug-fixes.

After the MiniGL 1.5 update, I asked people to email me if there were additional OpenGL features that they required. At this point a few others who had been working on MiniGL related projects came out of the wood-work and a small team (including the Friedens) started work on expanding the feature-set. Thus, MiniGL 2.x was born.

 MiniGL 2.x

A NURBS surface using the new evaluators

MiniGL 2.x constitues a major update to MiniGL, with a significant expansion of its feature set. Essentially, MiniGL is no longer so mini. The new features and changes are:

  • Added support for evaluators (glMap*, glEvalCoord*, glMapGrid*, glEvalMesh*, glEvalPoint*)
  • Added selection support (glListBase(), glNewList(), glInitNames(), glLoadName(), glPushName(), glPopName(), glSelectBuffer(), and glRenderMode())
  • Added gluPickMatrix()
  • Added gluProject()/gluUnProject()
  • Added glGetDoublev()
  • Added glIsTexture()
  • Added glGetTexEnviv()
  • Added glGetLight*() functions
  • Added GL_PROXY_TEXTURE support
  • Fixed some rendering bugs (e.g., a bug causing incorrect lighting for clipped primitives)
  • Added const qualifiers to improve OpenGL compliance
  • Mglut.library now has glutKeyboardUpFunc(), glutSpecialUpFunc(), and glutIgnoreKeyRepeat()
  • Added text functions to Mglut.library (glutBitmap*(),  glutStroke*())
  • Added glPushClientAttrib()/glPopClientAttrib()
  • Added glDrawPixels()
  • Added game mode to mglut.library
  • Added glutDeviceGet(), glutLayerGet(), glutGetModifiers(), glutSetOptions() and expanded the number of attributes supported by glutGet()
  • Added glut geometry rendering functions including the teapot functions
  • Added glut overlay function stubs for completeness (overlay is not actually supported)
  • Added glGetMaterial*()
  • Added the complete set of glNormal*() functions
  • Added glGetTexImage
  • Added full set of glPixelStore modes, as well as glPixelTransfer
  • Added glutTimerFunc(), glutCloseFunc(), glutWMCloseFunc()
  • Added glutWarpPointer()
  • Added glutExtensionSupported(), glutIgnoreKeyRepeat(), glutSetKeyRepeat(), glutKeyUp(), glutSpecialUp(), and glutForceJoystickFunc() (note: no joystick support yet)
  • Added stubs for glutSetColor(), glutGetColor(), and glutCopyColormap() (note: these functions really don't make sense any more but they're in the GLUT spec. Like FreeGLUT, these don't do anything as we're using truecolour modes)
  • Added glDrawBuffer and cleaned up the whole video code
  • Added the SGI GLU library into MiniGL. MiniGL now supports all of GLU

MiniGL 2.5 was released 6 January 2011. It can be downloaded from This will probably be the final release of MiniGL. It includes some optimizations to make 3D apps run a little faster. Thanks to Massimiliano Tretene, for the optimizations.

That's Nice, but What Does all this Mean?

If you are asking this question then you are obviously not a 3D graphics software developer. For users, this means more 3D games; more 3D software. All the features listed above are really only important to people who are writing OpenGL based software, or porting existing ones. MiniGL 2.0 provides developers with a more complete implementation of the OpenGL API making it much easier to port existing OpenGL games/applications. It also provides developers of new 3D software with a wider range of functions for generating the effects that they desire.

Chromium B.S.U

More screenshots...

MiniGL's Future

MiniGL 2.x will be the end of the line as far as MiniGL is concerned. It is provided as a stop-gap solution until a complete MESA port is available. Eventually it will simply be a stub that maps on to MESA. MESA will provide a complete OpenGL implementation that is up-to-date. However, a full MESA port may take some time. In the interim, MiniGL 2.x provides enough functionality to increase the amount of 3D software that is available for Amiga OS 4.0. 


Projects » Amiga OS 4 Projects » MiniGL