OpenGL OS/2 Developer reference guide

CONTENTS


  1. Preface

  2. Development tools - C/C++ compiler and environments

  3. OS/2 OpenGL API support, differences, stability, bugs

  4. Additional utility libraries, toolkits

  5. Programming notes

  6. IBM OpenGL Documentation

  7. glxinfo OpenGL, GLU reports


1. Preface


OpenGL (Open Graphics Library) is a standard specification defining a cross-language, cross-platform API for writing applications that produce 2D and 3D computer graphics.
See http://www.opengl.org/ or http://en.wikipedia.org/wiki/OpenGL.


2. Development tools - C/C++ compiler and environments


  1. Open Watcom C/C++ ( opensource, latest: version 1.9, May 2010, site - http://www.openwatcom.org/, download - http://ftp.openwatcom.org/ftp/ )

    API: internal support (i.e. libraries) for use with IBM OpenGL 1.1 beta update DLLs only. Note that corresponding LIBAUX.LIB v1.1 is absent. If you wish to develop applications for "core" IBM OpenGL 1.0 use these libraries from IBM OS/2 Developer's Toolkit:

    {install_directory}\lib\glut.lib
    {install_directory}\lib\libaux.lib
    {install_directory}\lib\libtk.lib
    {install_directory}\lib\opengl.lib
    

    No changes for header files (*.h) are needed.

    Available utility libraries, toolkits: PGL, GLUT v2, LIBTK.

    BUG: Header file {root}\watcom\h\os2\gl\glut.h has bug which prevents using fonts in GLUT API.

    extern void *glutStrokeRoman;
    extern void *glutStrokeMonoRoman;
    extern void *glutBitmap9By15;
    extern void *glutBitmap8By13;
    extern void *glutBitmapTimesRoman10;
    extern void *glutBitmapTimesRoman24;
    
    to
    extern void __syscall *glutStrokeRoman;
    extern void __syscall *glutStrokeMonoRoman;
    extern void __syscall *glutBitmap9By15;
    extern void __syscall *glutBitmap8By13;
    extern void __syscall *glutBitmapTimesRoman10;
    extern void __syscall *glutBitmapTimesRoman24;
    

  2. GNU GCC C/C++ ( opensource, site - http://gcc.gnu.org/. OS/2 port - ftp://ftp.netlabs.org/pub/gcc/ )

    Has no internal OpenGL support i.e. no libraries and no include (.h) flies, but it is possible to convert existing OpenGL libraries into format, supported by GCC:

    emximp -o opengl.a opengl.dll
    emximp -o opengl.a opengl.lib
    

  3. IBM VisualAge C++ ( commercial, latest version 3.65 (or 4.0), 1998-1999 )

    API: Include OpenGL 1.0 DLLs and header files in IBM OS/2 Developer's Toolkit. OpenGL 1.1 update available on Hobbes OS/2 Archive: OpenGL 1.1 for OS2. Gold Release (1997/Jun/10). Includes DLL, Libs, C++ Samples code.

    Available utility libraries, toolkits: PGL, GLUT v2, LIBTK, LIBAUX (AUX).

MORE INFO: Development Tools (RUS)


3. OS/2 OpenGL API support, differences, stability, bugs


Note that all API discussed below are mostly software, with some kind of 2D-acceleration only.

  • OpenGL 1.0 (1 July 1992) released by IBM Corp.,

    Available builds are (can be found here: service.boulder.ibm.com):

    1. OpenGL 1.0 version 9548 built at 29 Nov 1995 on kanga.austin.ibm.com,
      ogl9548.zip  - OpenGL for OS/2 version 9548. Equivalent to the code on
                     DevCon 9 Special Edition. This is the GA release.
      
    2. OpenGL 1.0 version 9611 built at 18 Mar 1996 on slide.austin.ibm.com,
      ogl9611.zip  - OpenGL for OS/2 version 9611. Equivalent to the code on
                     DevCons 10 & 11, and the Merlin Beta. Updates include: single 
                     buffer and 16 bit visual support, performance enhancements, 
                     improved memory usage, reduced hard-drive space requirements.
      
    3. OpenGL 1.0 version 9632 built at 29 Jul 1996 on slide.austin.ibm.com,
      base         - included with OS/2 Warp 4.x, eComstation.
      
    4. OpenGL 1.0 version 9635 built at 26 Aug 1996 on slide.austin.ibm.com (+os2ogl.sys).
      ogl9635.zip  - OpenGL for OS/2 version 9635. For the most part, this level
                     is equivalent to the OpenGL release found on OS/2 Warp 
                     Version 4 (that release is 9632). Updates include:
                     performance patch for PentiumPro processors, improved color
                     palette handling with 8 bit visuals, and miscellaneous
                     fixes.
      
    DOCUMENTATION: OpenGL 1.0 whitepaper (Blue Book).
    BUGS: No font output in glut.lib/glut.h.
    STABILITY: Very stable.
    SUPPORTED DISPLAY BPP: 8,15,16,24,32.
    PROBLEMS:
    • The main problem of this 1.0 API - absence of very useful functions, which are appeared in OpenGL 1.1 or later:
      * OPENGL *
      
      glAreTexturesResident
      glArrayElement
      glBindTexture
      glColorPointer
      glCopyTexImage1D
      glCopyTexImage2D
      glCopyTexSubImage1D
      glCopyTexSubImage2D
      glDeleteTextures
      glDisableClientState
      glDrawArrays
      glDrawElements
      glEdgeFlagPointer
      glEnableClientState
      glGenTextures
      glGetPointerv
      glIndexPointer
      glIndexub
      glIndexubv
      glInterleavedArrays
      glIsTexture
      glNormalPointer
      glPolygonOffset
      glPopClientAttrib
      glPrioritizeTextures
      glPushClientAttrib
      glTexCoordPointer
      glTexSubImage1D
      glTexSubImage2D
      glVertexPointer
      
      gluDeleteMesh
      gluGetTessProperty
      gluTessBeginContour
      gluTessBeginPolygon
      gluTessEndContour
      gluTessEndPolygon
      gluTessNormal
      gluTessProperty
      
      pglConfigList
      pglInternalGetCharBitmap
      pglNoop
      
      * GLUT *
      
      glutBitmap8By13
      glutBitmap9By15
      glutBitmapTimesRoman10
      glutBitmapTimesRoman24
      glutLoopProc
      glutSolidOctahedron
      glutStrokeMonoRoman
      glutStrokeRoman
      glutWindowList
      glutWireOctahedron
      
      * LIBTK *
      
      IdleFunc
      tkLoopProc
      tkRGBMap
      tkWindowProc
      
    • In GLUT utility library font output routines glutBitmapCharacter() and glutStrokeCharacter() won't work as font constants GLUT_BITMAP_..., GLUT_STROKE_... are absent in GLUT.DLL v1.0.

    LINKS: Included with IBM OS/2 Warp 4.x and later (also compatible with earlier OS/2 32-bit versions - Warp 3.x, Warp 2.x).

  • OpenGL 1.1 (29 Mar 1997) released by IBM Corp., beta, OpenGL 1.1 version 9611 built at 10 Apr 1997 on node.austin.ibm.com.
    DOCUMENTATION: OpenGL 1.1 whitepaper (Red Book).
    PROBLEMS:

    • When you are NOT using constant pointers to index arrays, glDrawElements() and may be other vertex array functions makes garbage in memory and thrashes vertices arrays:
      This sample makes a memory thrash:
      unsigned short * s_idx;
      unsigned short s_idx0[] = {0,1,2,0,4,3};
      
      void FillBuffers(void)
      {
      ...
      s_idx = new unsigned short[6];
      memcpy(s_idx,s_idx0,sizeof(unsigned short)*6);
      ...
      }
      
      void Render(void)
      {
      ...
      glVertexPointer(...);
      glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, s_idx);
      ...
      }
      
      And this makes not:
      unsigned short s_idx[] = {0,1,2,0,4,3};
      
      void Render(void)
      {
      ...
      glVertexPointer(...);
      glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, s_idx);
      ...
      }
      
    • Alphablending functions - glBlendFunc() works incorrectly.
    • This update does not contain LIBAUX toolkit, which is available separately on OS/2 Site, link - aux.zip or on service.boulder.ibm.com - aux.zip.

    STABILITY: Unstable.
    SUPPORTED DISPLAY BPP: 8,15,16,24,32.
    LINKS: Hobbes OS/2 Archive - OpenGL 1.1 for OS2. Gold Release (1997/Jun/10). Includes DLL, Libs, C++ Samples code.

  • Mesa3D OpenGL 1.x (Mesa 2.x-5.x) - some older builds of Mesa3D ( http://www.mesa3d.org/ ) supports OS/2 and requires XFree86/OS2 package installed. I will not cover them here.

  • WarpMesaGL project OpenGL 1.4 (Mesa 5.1) an opensource attempt to make a better Mesa3D adaptation for OS/2 with future plans to provide acceleration support, it uses Mesa3D version 5.1 as a base, author is Eugeny Kotsuba, it can rasterize frames through DIVE or GPI calls. Latest version released 20030531.
    DOCUMENTATION: http://www.mesa3d.org/, OpenGL 1.4 whitepaper.
    PROBLEMS: only GLUT utility API is supported. When you are using double-buffered output and using DIVE-based window, it positioned starting from screen bottom left (0,0), i.e. not from application window bottom left corner.
    NOTES: In WarpMesaGL screen Y coordinate is reversed!
    STABILITY: Beta.
    SUPPORTED DISPLAY BPP: 4,8,15,16,24,32. For 8-bpp DIVE output looks better.
    LINKS: WarpMesaGL Main, WarpMesaGL benchmark, TriSPD benchmark.
    WarpMesaGL Toolkit vers. alpha minus 1.4, OpenGL Samples for WarpMesaGL.
    There is a program for OS/2 based on WarpMesaGL: PMViewMol3D.

  • OpenGL 1.5 (Mesa 6.2.1) - GPL licensed and released by SciTech Software as a part of SNAP SDK, last version is SDK v3.1 26 October 2006, (release 23). It provides 2D video acceleration only.
    DOCUMENTATION: OpenGL 1.5 whitepaper.
    20061026 release of SDK contains MGL 6.0 static library compatible with OpenGL 1.5 API [Mesa3D v6.2.1] and GLUT version 2 static library. SciTech SNAP SDK 3.1 (26 October 2006, release 23) compatible with the following OS/2 build environments:

    Borland C++ 2.0 in 32-bit OS/2 mode
    EMX 0.9c in 32-bit OS/2 mode
    IBM VisualAge C++ 3.0 in 32-bit mode
    IBM VisualAge C++ 3.65 in 32-bit mode
    Open Watcom 1.x in 32 bit mode
    Watcom C/C++ 10.6 in 32 bit mode
    Watcom C/C++ 11.0 in 32 bit mode
    
    Prerequisites for SNAP SDK-based applicaton:

    A. Installed SNAP Graphics driver,

    or

    B. Installed special VESA driver-set from SNAP SDK:

    1. Make a directory for driver, "C:\SNAP\DRIVERS"
    2. In autoexec.bat, SET SNAP_PATH=C:\SNAP\DRIVERS
    3. In config.sys, DEVICE=C:\OS2\SDDHELP.SYS /Q (get it from zip:sdk\drivers\os2)
    4. Copy directory tree from zip:sdk\drivers\x86\*.* to C:\SNAP\DRIVERS
    5. Rename C:\SNAP\DRIVERS\graphics.vbe to C:\SNAP\DRIVERS\graphics.bpd

    As this SDK is crossplatform - a lot of operating systems are supported:

    BeOS
    MS-DOS
    OS/2
    Microsoft Windows (CE, NT, 2000, XP)
    QNX
    SMX (the SunOS/Solaris port of MINIX)
    Linux
    On Time RTOS-32
    Unununium OS
    

    BUGS: garbaged texture rendering in 24-bit modes.
    PROBLEMS: incorrect alphablending in some truecolor modes (mostly 32-bit).
    Implemented but does not working API - glutBitmapCharacter() and glutStrokeCharacter() due to badly declared or exported:
    /* stroke font opaque addresses (use constants instead in source code) */
    extern void *glutStrokeRoman(void);
    extern void *glutStrokeMonoRoman(void);
    
    /* stroke font constants (use these in GLUT program) */
    #define GLUT_STROKE_ROMAN               glutStrokeRoman()
    #define GLUT_STROKE_MONO_ROMAN          glutStrokeMonoRoman()
    
    /* bitmap font opaque addresses (use constants instead in source code) */
    extern void *glutBitmap9By15(void);
    extern void *glutBitmap8By13(void);
    extern void *glutBitmapTimesRoman10(void);
    extern void *glutBitmapTimesRoman24(void);
    extern void *glutBitmapHelvetica10(void);
    extern void *glutBitmapHelvetica12(void);
    extern void *glutBitmapHelvetica18(void);
    
    /* bitmap font constants (use these in GLUT program) */
    #define GLUT_BITMAP_9_BY_15             glutBitmap9By15()
    #define GLUT_BITMAP_8_BY_13             glutBitmap8By13()
    #define GLUT_BITMAP_TIMES_ROMAN_10      glutBitmapTimesRoman10()
    #define GLUT_BITMAP_TIMES_ROMAN_24      glutBitmapTimesRoman24()
    #define GLUT_BITMAP_HELVETICA_10        glutBitmapHelvetica10()
    #define GLUT_BITMAP_HELVETICA_12        glutBitmapHelvetica12()
    #define GLUT_BITMAP_HELVETICA_18        glutBitmapHelvetica18()
    

    STABILITY: Good.
    SUPPORTED DISPLAY BPP: 8,15,16,24,32.
    LINKS: SNAP SDK source code: SNAP SDK directory, full_depot_r23.zip (about 44 Mb) is a full package, see notes -
    Installing the files
    --------------------
    
    The SciTech MGL requires the SciTech SNAP Graphics SDK in order to
    access the underlying graphics hardware device. Hence to install
    the SciTech MGL, you will need to first install and configure the
    SciTech SNAP SDK. To install the files, at a minimum you will need
    a copy of the SciTech SNAP SDK source archive, the SciTech SNAP SDK
    base utilities archive for your OS, the SciTech SNAP device driver
    binaries, the MGL source archive and the font and bitmap resource
    archives. Uncompress all files in the archives into the directory
    on your system where you want the files to live (normally c:\scitech
    or ~/scitech for Unix). You can optionally install the source code
    for the base archive utilities as well as the MGL documentation
    in HTML format (for offline browsing). The names of the archives
    included in this release are:
    
     snap_sdk_3.1-r23-src.zip        - SNAP source archive in DOS/Win format
     snap_sdk_3.1-r23-win32.zip      - Win32 hosted base utilities
     snap_sdk_3.1-r23-os2.zip        - OS/2 hosted base utilities
     snap_sdk_3.1-r23-drivers.zip    - SciTech SNAP device driver binaries
     snap_sdk_3.1-r23-util.zip       - Source code for base utilities
     snap_sdk_3.1-r23-docs.zip       - SDK documentation in HTML format
     snap_sdk_3.1-r23-pdf.zip        - SDK documentation in Adobe PDF format
     mgl_6.0-r23-src.zip             - MGL source archive in DOS/Win format
     mgl_6.0-r23-drivers.zip         - MGL binary portable modules
     mgl_6.0-r23-font.zip            - Base font and bitmap archive
     mgl_6.0-r23-ttf1.zip            - Free TrueType Font archive 1
     mgl_6.0-r23-ttf2.zip            - Free TrueType Font archive 2
     mgl_6.0-r23-docs.zip            - MGL documentation in HTML format
     mgl_6.0-r23-pdf.zip             - MGL documentation in Adobe PDF format
     snap_sdk_3.1-r23-src.tar.gz     - Source archive in Unix format
     snap_sdk_3.1-r23-linux.tar.gz   - Linux hosted base utilities
     snap_sdk_3.1-r23-qnx.tar.gz     - QNX hosted base utilities
     snap_sdk_3.1-r23-drivers.tar.gz - SciTech SNAP device driver binaries
     snap_sdk_3.1-r23-util.tar.gz    - Source code for base utilities
     snap_sdk_3.1-r23-docs.tar.gz    - SDK documentation in HTML format
     snap_sdk_3.1-r23-pdf.tar.gz     - SDK documentation in Adobe PDF format
     mgl_6.0-r23-src.tar.gz          - MGL source archive in Unix format
     mgl_6.0-r23-drivers.tar.gz      - MGL binary portable modules
     mgl_6.0-r23-font.tar.gz         - Base font and bitmap archive
     mgl_6.0-r23-ttf1.tar.gz         - Free TrueType Font archive 1
     mgl_6.0-r23-ttf2.tar.gz         - Free TrueType Font archive 2
     mgl_6.0-r23-docs.tar.gz         - MGL documentation in HTML format
     mgl_6.0-r23-pdf.tar.gz          - MGL documentation in Adobe PDF format
    
    Due to SciTech Software acquisition in 2008 by Alt Richmond Inc., SNAP technology is now a part of GAV product line.

  • GL/2 project an opensource attempt to recreate OpenGL libraries from scratch, with future plans to provide acceleration support, author is Dee Sharpe.
    DOCUMENTATION: http://svn.netlabs.org/gl2/browser/plan.txt.
    STABILITY: Alpha.
    LINKS: http://svn.netlabs.org/gl2/browser.


4. Additional utility libraries, toolkits


Utility libraries provides interface between OpenGL 3D subsystem and subsystem of OS/2 for:

  • setting, changing screen resolutions;
  • control screen, frame buffering;
  • control mouse, keyboard, joystick input;
  • providing additional functionality to OpenGL API (f.e. loading and converting textures to internal OpenGL RGB/RGBA format).
  1. PGL Toolkit: base internal OS/2 Presentation Manager API.
  2. The GLUT Toolkit: GLUT version 2 ( current API is version 4, opensource analogs - freeglut, openglut projects ), GLUT 3 specification.
  3. The Auxilliary Toolkit: LIBAUX ( library update v1.1 exists on Hobbes OS/2 Archive - glaux.zip ).
  4. The Nano Window Toolkit: LIBTK.
  5. SciTech SNAP SDK: GLUT version 2 and SNAP-specific crossplatform utility interface for OpenGL.

See an EDM/2 article chapter: OpenGL and OS/2: The Utility Libraries.
Here is full EDM/2 article: OpenGL and OS/2 by Perry Hook.


5. Programming notes


  1. Used calling conventions (x86 calling conventions):

    IBM OpenGL libraries uses __syscall (Open Watcom) or _System (IBM VAC) calling convention.
    WarpMesaGL libraries uses _Optlink (IBM VAC) calling convention and incompatible with Open Watcom.

  2. In some cases (PGL toolkit f.e.) a large stack (about 1-2-4 Megabytes) is required, due to stack space usage for function parameter storage.

  3. In OS/2, SNAP SDK-based OpenGL application runs only in Fullscreen mode.

  4. If you need to make OpenGL LIBs from DLLs - it is possible to use command line utility implib.exe from IBM VisualAge C++, like this:

    implib opengl.lib opengl.dll
    
  5. This way we can make an VIO application that has working PM queue.

    int main( int argc, char *argv[] )
    {
    PPIB pib;
    PTIB tib;
    
    printf("we are in console now\n");
    
    DosGetInfoBlocks(&tib, &pib);
    
    /* morphing into a PM application. */
    
    if(pib->pib_ultype == 2) /* VIO */
    pib->pib_ultype = 3;
    
    ...
    }
    
    

    See an EDM/2 article: Calling PM from AVIO applications


6. IBM OpenGL Documentation


OPENGL.DOC from IBM OS/2 Warp 4

OpenGL
------

  Hardware and Software Requirements
  ----------------------------------

  - 9MB DASD, 16MB RAM
  - fast 486, Pentium, or PentiumPro
  - installation of Base Multimedia Support
  - screen depth of 256, 64K, or 16M colors (8, 16, or 24 bit)

  PentiumPro Performance
  ----------------------

  OpenGL performance on a PentiumPro system may be increased by installing
  the OpenGL PentiumPro Driver. The OpenGL PentiumPro Driver is located on
  the Device Driver Pack CD-ROM included with Warp 4. The driver and 
  installation instructions can be found in:
  Device Solutions->IBM Corporation->OpenGL PentiumPro Driver 

   Important Troubleshooting Tips 
   ------------------------------

   OpenGL makes a lot of demands on the setup of your system, and when the setup
   reported by the graphics device driver does not exactly match the actual one, 
   problems can arise. If OpenGL does not render, or if the image looks incorrect,
   one of the following items may help. These settings will override whatever 
   OpenGL queries from your graphics device, so do not use them unless you are
   having trouble.

   - A "squished" OpenGL image is most likely the result of an incorrect 
     bits-per-pixel report from your OS/2 graphics device driver when 
     running in 24 bit. In this case, setting  OGL_BIT_COUNT=32 in your 
     environment by adding "SET OGL_BIT_COUNT=32" to the config.sys should 
     correct the image. Please be aware that this statement should not be used 
     when in 8 or 16 bit.

   - An OpenGL rendering that has a repeated image that goes beyond the bounds
     of the window is probably the result of an incorrect scanline size report.
     Scanline sizes are usually the product of the horizontal screen resolution 
     and the screen depth in bytes-per-pixel (a 1024x768x64k setting may use a
     scanline size of 2048, since 64K is 2**16 which means every pixel is
     comprised of 2 bytes). In this case, adding "SET OGL_SCANLINE_SIZE=2048" 
     to the config.sys should correct the problem. Please be aware that a 
     OGL_SCANLINE_SIZE setting that works in one screen resolution and depth 
     setting will not work in another. 

   - When running with a color depth of 8 bit, OpenGL will attempt to preserve
     the PM colors used on the desktop, but as a result, OpenGL may not receive
     all of the colors in its palette. The results obtained are very graphic card 
     dependent. If OpenGL is not receiving all of the colors it needs for an
     image, OpenGL can force PM to use the OpenGL colors by setting 
     "OGL_OVERRIDE_COLORS=1" in your environment. Be aware that the PM desktop
     will flash and the PM colors may not be preserved when the OpenGL window
     has focus, but the OpenGL window will obtain all of its colors. Setting
     "OGL_OVERRIDE_COLORS=" will reset the overriding of PM colors. But in all
     cases the best visual results will be obtained when 
          "System Setup->System->256 Colors->Workplace shell palette aware" is 
     checked (see Helpful Information).
     

   Helpful Information
   -------------------

   When running in 8 bit (256 colors), the following check box should be selected 
   for optimal visual results: 
       "System Setup->System->256 Colors->Workplace shell palette aware" 

   The best OpenGL performance will be attained with a PCI graphics card that is
   not bank-switched at the desired screen resolution and depth. When running
   in 24 bit, a non packed pixel (32 bot) device driver and graphics card 
   combination will yield better performance then a packed pixel (24 bit) one.

   Running OpenGL on a Matrox Millennium in 24 bit requires that DIVE support
   is enabled. See the documentation that came your Matrox for information on
   how to enable DIVE support in 24 bit.

   Summary of Settable Environment Variables
   -----------------------------------------

   The following strings are scanned for in the current environment by OpenGL, 
   these can be set by using the "SET" command in OS/2 (issue "help set" in an 
   OS/2 Window for information on the "SET" command). may help. These settings
   will override whatever OpenGL queries from your graphics device, so do not 
   use them unless you are having trouble.


   OGL_BIT_COUNT - used by OpenGL to replace the bits-per-pixel report from the 
   graphics device driver. Primary use is for when a 32 bit-per-pixel (non-packed) 
   setup actually reports 24 bpp (packed). See "Important Troubleshooting Tips" 
   section.

   OGL_SCANLINE_SIZE - used by OpenGL to replace the scanline size report from 
   the graphics device driver. See "Important Troubleshooting Tips" section.

   OGL_VIDEO_MEM_SIZE - used by OpenGL to enable PentiumPro specific optimizations.
   Has no affect on other CPU's. See "PentiumPro Performance" section.

   OGL_OVERRIDE_COLORS - used by OpenGL to override the PM colors in the color
   palette. Only applicable when running in 8 bit. See "Important Troubleshooting Tips" 
   section.

README.FYI from IBM OS/2 OpenGL 1.1 update beta

This is the "gold" release of OpenGL 1.1 for OS2.  Please forwared any
problems to IBM support or mail a description of the problem and a 
testcase to - os2-opengl@utsi.com.


   Important Troubleshooting Tips
   ------------------------------

   OpenGL makes a lot of demands on the setup of your system, and when
   the setup reported by the graphics device driver does not exactly
   match the actual one, problems can arise. If OpenGL does not render,
   or if the image looks incorrect, one of the following items may help.
   These settings will override whatever OpenGL queries from your graphics
   device, so do not use them unless you are having trouble.

   - A "squished" OpenGL image is most likely the result of an incorrect
     bits-per-pixel report from your OS/2 graphics device driver when
     running in 24 bit. In this case, setting  OGL_BIT_COUNT=32 in your
     environment by adding "SET OGL_BIT_COUNT=32" to the config.sys should
     correct the image. Please be aware that this statement should not be used
     when in 8 or 16 bit.

   - An OpenGL rendering that has a repeated image that goes beyond the bounds
     of the window is probably the result of an incorrect scanline size report.
     Scanline sizes are usually the product of the horizontal screen resolution
     and the screen depth in bytes-per-pixel (a 1024x768x64k setting may use a
     scanline size of 2048, since 64K is 2**16 which means every pixel is
     comprised of 2 bytes). In this case, adding "SET OGL_SCANLINE_SIZE=2048"
     to the config.sys should correct the problem. Please be aware that a
     OGL_SCANLINE_SIZE setting that works in one screen resolution and depth
     setting will not work in another.

   - When running with a color depth of 8 bit, OpenGL will attempt to preserve
     the PM colors used on the desktop, but as a result, OpenGL may not receive
     all of the colors in its palette. The results obtained are very graphic
     card dependent. If OpenGL is not receiving all of the colors it needs
     for an image, OpenGL can force PM to use the OpenGL colors by setting
     "OGL_OVERRIDE_COLORS=1" in your environment. Be aware that the PM desktop
     will flash and the PM colors may not be preserved when the OpenGL window
     has focus, but the OpenGL window will obtain all of its colors.  Setting
     "OGL_OVERRIDE_COLORS=" will reset the overriding of PM colors. But in all
     cases the best visual results will be obtained when 
     "System Setup->System->256 Colors->Workplace shell palette aware" is
     checked (see Helpful Information).


   Helpful Information
   -------------------

   When running in 256 color mode, the following check box should be selected
   for optimal visual results:
       "System Setup->System->256 Colors->Workplace shell palette aware"

   The best OpenGL performance will be attained with a PCI graphics card that
   is not bank-switched at the desired screen resolution and depth. When
   running in 24 bit, a non packed pixel (32 bot) device driver and graphics
   card combination will yield better performance then a packed pixel (24 bit)
   one.

   Running OpenGL on a Matrox Millennium in 24 bit requires that DIVE support
   is enabled. See the documentation that came your Matrox for information on
   how to enable DIVE support in 24 bit.

   Summary of Settable Environment Variables
   -----------------------------------------

   The following strings are scanned for in the current environment by OpenGL,
   these can be set by using the "SET" command in OS/2 (issue "help set" in an
   OS/2 Window for information on the "SET" command). may help. These settings
   will override whatever OpenGL queries from your graphics device, so do not
   use them unless you are having trouble.


   OGL_BIT_COUNT - used by OpenGL to replace the bits-per-pixel report from the
   graphics device driver. Primary use is for when 32 bpp(non-packed)
   setup actually reports 24 bpp (packed). See "Important Troubleshooting Tips"
   section.

   OGL_SCANLINE_SIZE - used by OpenGL to replace the scanline size report from
   the graphics device driver. See "Important Troubleshooting Tips" section.

   OGL_OVERRIDE_COLORS - used by OpenGL to override the PM colors in the color
   palette. Only applicable when running in 8 bit. See "Important
   Troubleshooting Tips" section.

OGL-DDK.ps from IBM OS/2 OpenGL DDK

The OpenGL for OS/2 device driver sample consists of a set of source code and binary module
components that can be adapted by IHVs to provide accelerated 3D graphics device support for
OpenGL 1.1 on OS/2. The device driver sample targets an Omnicomp 3DEMON adapter which uses
the 3Dlabs GLINT 300SX chipset. This document describes the architecture of OpenGL on OS/2,
the design and operation of the sample driver for the Omnicomp 3DEMON adapter, and it suggests
how different 3D graphics hardware can be exploited using the sample driver as a guide.

Features of the device driver sample include:
 * OpenGL acceleration in an OS/2 window
 * accelerated color and depth buffer clears
 * accelerated flat and Gouraud shaded triangles, with and without depth buffer enabled
 * fullscreen double buffering synchronized to vertical retrace
 * asynchronous DMA operation for GLINT

The sample driver includes:
 * source code for an OS/2 GRADD display driver (GLIGRADD) for PM and Win-OS/2
 * source code for PGL for OpenGL on OS/2
 * source code for complete rasterizer support for OpenGL on OS/2; with both full software
function and sample GLINT hardware acceleration (requires SGI OpenGL source license and
IBM nondisclosure agreement)
 * source code for a Rendering Context Manager (RCM) to handle different rendering contexts
using an accelerated rasterizer
 * source code for a physical device driver (PDD) to handle DMA transfers and vertical retrace
interrupts

The GLPIPE.DLL module, which provides geometry pipeline processing for OpenGL on OS/2, is
provided as a binary-only module. Also, IBM continues to provide a binary-only alternate
RASTER.DLL module, which is a highly optimized software-only rasterizer for OpenGL on OS/2

7. glxinfo OpenGL, GLU reports


glxinfo - display info about a GL, GLU extensions and OpenGL renderer.

glxinfo lists information about the GL, GLU extensions, OpenGL capabilities, and the OpenGL renderer. The GLX and renderer info includes the version and extension attributes.

report from IBM OpenGL 1.0

OpenGL vendor string: IBM
OpenGL renderer string: SoftRaster
OpenGL version string: 1.0.0
OpenGL extensions:
    GL_EXT_texture_object, GL_EXT_vertex_array, GL_EXT_rescale_normal
GLU version string: OS/2
GLU extensions:

max texture size: 1024x1024
max viewport dims: 2047x2047
max modelview stack depth: 32
max projection stack depth: 4
max texture stack depth: 4
max attrib stack depth: 16
max name stack depth: 128
max list nesting: 64
max eval order: 16
max pixel map table: 4096
max lights: 8
max clip planes: 6
aux buffers: 0
subpixel bits: 4

report from IBM OpenGL 1.1 update beta

OpenGL vendor string: IBM
OpenGL renderer string: SoftRaster
OpenGL version string: 1.1.0
OpenGL extensions:
    GL_EXT_texture_object, GL_EXT_vertex_array, GL_EXT_rescale_normal, 
    GL_IBM_rasterpos_clip, GL_EXT_abgr, GL_EXT_blend_logic_op, 
    GL_EXT_polygon_offset, GL_EXT_subtexture, GL_EXT_blend_subtract, 
    GL_EXT_blend_minmax
GLU version string: OS/2
GLU extensions:

max texture size: 1024x1024
max viewport dims: 2047x2047
max modelview stack depth: 32
max projection stack depth: 4
max texture stack depth: 4
max attrib stack depth: 16
max client attrib stack depth: 16
max name stack depth: 128
max list nesting: 64
max eval order: 16
max pixel map table: 4096
max lights: 8
max clip planes: 6
aux buffers: 0
subpixel bits: 4

report from WarpMesaGL OpenGL 1.4 [Mesa3D 5.1]

OpenGL vendor string: Evgeny Kotsuba
OpenGL renderer string: WarpMesaGL OS/2 PM DIVE // when bUseDive = 1
OpenGL renderer string: WarpMesaGL OS/2 PM GPI  // when bUseDive = 0
OpenGL version string: 1.4 Mesa 5.1
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_fragment_program, GL_ARB_imaging, 
    GL_ARB_multisample, GL_ARB_multitexture, GL_ARB_point_parameters, 
    GL_ARB_shadow, GL_ARB_shadow_ambient, GL_ARB_texture_border_clamp, 
    GL_ARB_texture_compression, GL_ARB_texture_cube_map, 
    GL_ARB_texture_env_add, GL_ARB_texture_env_combine, 
    GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3, 
    GL_ARB_texture_mirrored_repeat, GL_ARB_transpose_matrix, 
    GL_ARB_vertex_program, GL_ARB_window_pos, GL_ATI_texture_mirror_once, 
    GL_ATI_texture_env_combine3, GL_EXT_abgr, GL_EXT_bgra, 
    GL_EXT_blend_color, GL_EXT_blend_func_separate, GL_EXT_blend_logic_op, 
    GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_clip_volume_hint, 
    GL_EXT_convolution, GL_EXT_compiled_vertex_array, 
    GL_EXT_depth_bounds_test, GL_EXT_fog_coord, GL_EXT_histogram, 
    GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, GL_EXT_paletted_texture, 
    GL_EXT_point_parameters, GL_EXT_polygon_offset, GL_EXT_rescale_normal, 
    GL_EXT_secondary_color, GL_EXT_shadow_funcs, 
    GL_EXT_shared_texture_palette, GL_EXT_stencil_wrap, 
    GL_EXT_stencil_two_side, GL_EXT_texture3D, GL_EXT_texture_edge_clamp, 
    GL_EXT_texture_env_add, GL_EXT_texture_env_combine, 
    GL_EXT_texture_env_dot3, GL_EXT_texture_object, GL_EXT_texture_lod_bias, 
    GL_EXT_vertex_array, GL_HP_occlusion_test, GL_IBM_rasterpos_clip, 
    GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate, 
    GL_MESA_pack_invert, GL_MESA_resize_buffers, GL_MESA_ycbcr_texture, 
    GL_MESA_window_pos, GL_NV_blend_square, GL_NV_point_sprite, 
    GL_NV_texture_rectangle, GL_NV_texgen_reflection, GL_NV_fragment_program, 
    GL_NV_vertex_program, GL_NV_vertex_program1_1, GL_SGI_color_matrix, 
    GL_SGI_color_table, GL_SGI_texture_color_table, GL_SGIS_generate_mipmap, 
    GL_SGIS_pixel_texture, GL_SGIS_texture_border_clamp, 
    GL_SGIS_texture_edge_clamp, GL_SGIX_depth_texture, GL_SGIX_pixel_texture, 
    GL_SGIX_shadow, GL_SGIX_shadow_ambient
GLU version string: 1.3
GLU extensions:
    GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess

max texture size: 2048x2048
max viewport dims: 2048x2048
max modelview stack depth: 32
max projection stack depth: 32
max texture stack depth: 10
max attrib stack depth: 16
max client attrib stack depth: 16
max name stack depth: 64
max list nesting: 64
max eval order: 30
max pixel map table: 256
max lights: 8
max clip planes: 6
aux buffers: 0
subpixel bits: 4

report from SciTech Software OpenGL 1.5 [Mesa3D 6.2.1]

OpenGL vendor string: SciTech Software, Inc.
OpenGL renderer string: SciTech SNAP Graphics 3.1 /x86/MMX/SSE
OpenGL version string: 1.5 Mesa 6.2.1
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_fragment_program, GL_ARB_imaging, 
    GL_ARB_multisample, GL_ARB_multitexture, GL_ARB_occlusion_query, 
    GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shadow, 
    GL_ARB_shadow_ambient, GL_ARB_texture_border_clamp, 
    GL_ARB_texture_compression, GL_ARB_texture_cube_map, 
    GL_ARB_texture_env_add, GL_ARB_texture_env_combine, 
    GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3, 
    GL_ARB_texture_mirrored_repeat, GL_ARB_texture_non_power_of_two, 
    GL_ARB_texture_rectangle, GL_ARB_transpose_matrix, 
    GL_ARB_vertex_buffer_object, GL_ARB_vertex_program, GL_ARB_window_pos, 
    GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color, 
    GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, 
    GL_EXT_blend_logic_op, GL_EXT_blend_minmax, GL_EXT_blend_subtract, 
    GL_EXT_clip_volume_hint, GL_EXT_compiled_vertex_array, GL_EXT_convolution, 
    GL_EXT_copy_texture, GL_EXT_depth_bounds_test, GL_EXT_draw_range_elements, 
    GL_EXT_fog_coord, GL_EXT_histogram, GL_EXT_multi_draw_arrays, 
    GL_EXT_packed_pixels, GL_EXT_paletted_texture, GL_EXT_pixel_buffer_object, 
    GL_EXT_point_parameters, GL_EXT_polygon_offset, GL_EXT_rescale_normal, 
    GL_EXT_secondary_color, GL_EXT_separate_specular_color, 
    GL_EXT_shadow_funcs, GL_EXT_shared_texture_palette, 
    GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_subtexture, 
    GL_EXT_texture, GL_EXT_texture3D, GL_EXT_texture_edge_clamp, 
    GL_EXT_texture_env_add, GL_EXT_texture_env_combine, 
    GL_EXT_texture_env_dot3, GL_EXT_texture_lod_bias, 
    GL_EXT_texture_mirror_clamp, GL_EXT_texture_object, 
    GL_EXT_texture_rectangle, GL_EXT_vertex_array, GL_APPLE_packed_pixels, 
    GL_ATI_blend_equation_separate, GL_ATI_texture_env_combine3, 
    GL_ATI_texture_mirror_once, GL_HP_occlusion_test, 
    GL_IBM_multimode_draw_arrays, GL_IBM_rasterpos_clip, 
    GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate, 
    GL_MESA_pack_invert, GL_MESA_program_debug, GL_MESA_resize_buffers, 
    GL_MESA_ycbcr_texture, GL_MESA_window_pos, GL_NV_blend_square, 
    GL_NV_fragment_program, GL_NV_light_max_exponent, GL_NV_point_sprite, 
    GL_NV_texture_rectangle, GL_NV_texgen_reflection, GL_NV_vertex_program, 
    GL_NV_vertex_program1_1, GL_SGI_color_matrix, GL_SGI_color_table, 
    GL_SGI_texture_color_table, GL_SGIS_generate_mipmap, 
    GL_SGIS_pixel_texture, GL_SGIS_texture_border_clamp, 
    GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SGIX_depth_texture, 
    GL_SGIX_pixel_texture, GL_SGIX_shadow, GL_SGIX_shadow_ambient, 
    GL_SUN_multi_draw_arrays
GLU version string: 1.3
GLU extensions:
    GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess

max texture size: 2048x2048
max viewport dims: 4096x4096
max modelview stack depth: 32
max projection stack depth: 32
max texture stack depth: 10
max attrib stack depth: 16
max client attrib stack depth: 16
max name stack depth: 64
max list nesting: 64
max eval order: 30
max pixel map table: 256
max lights: 8
max clip planes: 6
aux buffers: 0
subpixel bits: 4

built by NatteFrost at 2012.01.31