Appendix A Microsoft OpenGL Information

Submitted by Samuel Paik.

Windows Driver Development Kits

Preliminary Windows 2000 DDK

Mini Client Driver
S3Virge
[Sample Windows 2000 display driver supporting DirectDraw, Direct3D, OpenGL MCD, Video Port Extensions]

Windows Driver and Hardware Development

OpenGL for 3D Color Graphics Programming
[Summary of OpenGL support in Windows]
Driver Licensing Program for OpenGL and Direct3D
WHQL - Test Kits and Procedures
[OpenGL Conformance tests are included in the display driver tests]
GDI Display Drivers in Windows 2000
GDI Display Drivers in Windows 2000
Multimedia Components in Windows 95 and Windows 2000
Implementing Display Control Panel Extensions in Windows 95 and Windows 98
[Notes on acceptible "Wait for Vblank" usage]
Microsoft Releases New 3-D DDK
[New ICD kit announcement including SGI OpenGL improvements--result of OpenGL truce with SGI]

Fluff articles

Industry Solutions: OpenGL Update
[Says OpenGL is important to Microsoft and that OpenGL 1.2 support will likely be available in a future Windows 2000 Service Pack]
Insider: Fixing Color Distortions in Windows 98 3D Screen Savers
Windows NT Workstation: Benchmark Results: Windows NT Workstation 4.0 Bests Unix Workstations in Two Industry-Standard Engineering Application Benchmarks
Windows NT Workstation: Windows NT Workstation and Windows 95: Technical Differences
[Windows 95 acquired OpenGL with Service Pack 1]
POCKETPC: Here Comes GAPI!
[OpenGL and DirectX are too heavyweight for CE, so yet another "Game API"]
PressPass: Microsoft Delivers Performance-Leading Version of OpenGL
[OpenGL 1.1 introduced for Windows 95 and Windows NT, 1.1 bundled with NT 4.0]
PressPass: Silicon Graphics and Microsoft Form Strategic Alliance To Define the Future of Graphics
[Fahrenheit project announcement--goes with OpenGL truce]
PressPass: Microsoft and Silicon Graphics Define Distribution And Support of OpenGL on the Windows Platform
[Truce over OpenGL--goes with Fahrenheit announcement. New DDK to incorporate old ICD DDK with code from SGI OpenGL]
OpenGL 3-D Graphics
[OpenGL technology brief]

MSDN Library

Platform SDK

OpenGL technical articles

OpenGL 1.1
[OpenGL 1.1 was first introduced into the Windows 9X line with Windows 95, OEM Service Release 2]
OpenGL I: Quick Start
This article describes GLEasy, a simple OpenGL program. OpenGL is a three-dimensional (3-D) graphics library included with the Microsoft® Windows NT® version 3.5 operating system. GLEasy is a Microsoft Foundation Class Library (MFC) application that provides a good starting point for investigations into the Windows NT implementation of OpenGL.
OpenGL II: Windows Palettes in RGBA Mode
If a program written for the Microsoft® Windows® operating system needs more than 16 colors and is running on an 8-bits-per-pixel (bpp) display adapter, the program must create and use a palette. OpenGL programs running on Windows NT® or (eventually) Windows 95 are no exception. OpenGL imposes additional requirements on the colors and their locations on the palette in RGBA mode. The articles "OpenGL I: Quick Start" and "Windows NT OpenGL: Getting Started" in the MSDN Library cover the basics of using OpenGL in a Windows-based program and are required reading for this article. Two sample applications, GLEasy and GLpal, accompany this article.
OpenGL III: Building an OpenGL C++ Class
This article discusses the development of a C++ class library for encapsulating OpenGLT code. The C++ class presented is for demonstration and educational purposes only. I will expand the class library for future OpenGL articles. The class library is not currently part of the Microsoft® Foundation Class Library (MFC), and there are no plans to add this class to MFC in the future. I assume that the reader has already read the first article in this series, "OpenGL I: Quick Start," in the MSDN Library. The class library is in the GLlib.DLL file included with this article. The EasyGL sample application, also included with this article, uses the classes in GLlib.DLL.
Color Index Mode
This article explores the Windows NTT implementation of OpenGLT color index mode. In color index mode, colors are specified as indexes into a palette instead of as levels of red, green, and blue. The EasyCI sample application (provided with this article) is a conversion of EasyGL that uses color index mode. EasyCI uses the GLlib.DLL, also included with this article.
OpenGL IV: Translating Windows DIBs
OpenGLT is a portable language for rendering three-dimensional (3-D) graphics. OpenGL does not understand Microsoft® Windows® device-independent bitmaps (DIBs); instead, it has its own format for representing images. This article explains how to translate a Windows DIB into a format usable with OpenGL. Some knowledge of the Windows DIB format and the Microsoft Foundation Class Library (MFC) is expected. The EasyDIB sample application and GLlib dynamic-link library (DLL) demonstrate the ideas presented in this article.
OpenGL VI: Rendering on DIBs with PFD_DRAW_TO_BITMAP
The PFD_DRAW_TO_BITMAP pixel format descriptor flag allows OpenGLT applications to render on a Microsoft® Windows® device-independent bitmap (DIB). The resulting DIB can be manipulated to the full extent using the commands in the Windows graphics device interface (GDI). This article explains how you can render OpenGL scenes on DIBs with PFD_DRAW_TO_BITMAP. The EasyBit sample application demonstrates the techniques presented in the article.
OpenGL VII: Scratching the Surface of Texture Mapping
This article explains how to apply bitmaps to OpenGLT surfaces to give them a realistic appearance. The bitmaps are known as textures and can resemble wood, marble, or any other interesting material or pattern. The process of applying or mapping a texture to a surface is known as texture mapping. The EasyTex and PicCube sample applications demonstrate the concepts discussed in this article.
OpenGL VIII: wglUseFontOutlines
This article explains how to use the Win32® wglUseFontOutlines function. This function creates three-dimensional (3-D) characters based on a TrueType® font for use in OpenGLT-rendered scenes. The EasyFont sample application demonstrates using wglUseFontOutlines.
Windows NT OpenGL: Getting Started
OpenGL, an industry-standard three-dimensional software interface, is now a part of Microsoft® Windows NTT version 3.5. As a hardware-independent interface, the operating system needs to provide pixel format and rendering context management functions. Windows NT provides a generic graphics device interface (GDI) implementation for this as well as a device implementation. This article details these implementations, OpenGL/NT functions, and tasks that applications need to accomplish before OpenGL commands can be used to render images on the device surface.
CUBE: Demonstrates an OpenGL Application
CUBE is a simple OpenGLT application. It demonstrates how to integrate OpenGL with the MFC single document interface (SDI), and how OpenGL's resource contexts are used in conjunction with device contexts.
OPENGL: Demonstrates Using OpenGL
This sample creates a control that draws a spinning cube using the OpenGL graphics library. [Uses ATL: Active Template Library]
OpenGL Without the Pain: Creating a Reusable 3D View Class for MFC
DirectX 6.0 Goes Ballistic With Multiple New Features And Much Faster Code
Get Fast and Simple 3D Rendering with DrawPrimitive and DirectX 5.0
February 97 Microsoft Interactive Developer Column: Fun and Games
[claims OpenGL will be based on Direct3D Immediate Mode in the future--I believe this work on this ended some time ago, may eventually be revived]
Poking Around Under the Hood: A Programmer's View of Windows NT 4.0
[What's new with Windows NT 4.0, including WGL (very misleading information)]
Windows NT Resource Kit: Registry Value Entries: Video Device Driver Entries
[OpenGL registry keys, among others]
Windows NT Resource Kit: Dynamic Link Library Files
[Annotated list of system DLLs]
DirectX Developer FAQ
[Notes that the DX7 Direct3D lighting model was changed to match OpenGL lighting]

Useful other articles

DIBs and Their Use
This article discusses the DIB (device-independent bitmap) concept from definition and structure to the API that uses it. Included is a small sample application that illustrates some of the most common methods of using DIBs to display and manipulate digital images. Functions discussed are GetDIBits, SetDIBits, CreateDIBitmap, SetDIBitsToDevice, StretchDIBits, and CreateDIBPatternBrush. This article does not discuss using palettes with DIBs.
Using DIBs with Palettes
This article discusses using palettes in conjunction with DIBs (device-independent bitmaps). It does not delve into involved uses of the Microsoft® WindowsT Palette Manager.
Creating Programs Without a Standard Windows User Interface Using Visual C++ and MFC
Microsoft® Visual C++T and the Microsoft Foundation Class Libraries (MFC) provided a very fast way to get a standard WindowsT-based application up and running. But what if you don't want the normal look and feel? Many games and educational applications have special user interface needs that can't be met with the standard Windows user interface. This article takes a look at creating a simple child's coloring game that uses only a single window and has no window border, caption, buttons, cursor, or any other recognizable elements of a Windows user interface.

Knowledge Base

Current

Q254265 - 'Advanced' Button Under 'Display' Does Not Work After Installation of Windows NT 4.0 Drivers in Windows 2000
[Windows 2000] After you upgrade from Microsoft Windows NT 4.0 to Microsoft Windows 2000, or after you install Windows NT 4.0 drivers in Windows 2000, and you click the Advanced button on the Settings tab under Display in Control Panel, you may receive an error message.
Q253521 - INFO: OpenGL Drivers
OpenGL drivers have traditionally been provided by the hardware vendors who provide the 3D adapter in your computer.
Q247438 - OpenGL Support Not Available on nVidia TNT2 Card in Microsoft Windows 2000
[Windows 2000] When you attempt to play a game that requires support for the OpenGL standard (for three-dimensional graphics display) on a Microsoft Windows 2000-based computer, the game does not run. [ed note: Microsoft does not ship display drivers with OpenGL support with Windows 2000]
Q240896 - OpenGL Program May Cause an Invalid Page Fault Error Message if the Window is Moved or Resized
[Windows 95, 98, 98SE] When you move or resize a window, a program that uses OpenGL may perform an illegal operation, and then shutdown. For example, Microsoft Internet Explorer may generate an invalid page fault if a Java tool using OpenGL is running, and the window displaying the OpenGL graphic content is moved. Also, the following message may be generated in the Details section of the Application error dialog box:
Q233390 - BUG: First Chance Exceptions When Calling ChoosePixelFormat
[Windows 95, 98] The following error is displayed in the debug window of Visual C++:
First-chance exception in myapp.exe (GDI32.DLL): 0xC0000005: Access Violation.
Q228099 - PRB: wglUseFontOutlines Does Not Handle DBCS
[Windows 98, NT 4.0] On Windows 98, the OpenGL function wglUseFontOutlines does not work with DBCS or UNICODE strings. On Windows NT, UNICODE strings work; however, DBCS strings do not.
Q227279 - OpenGL Screen Saver Prevents Power Management Standby Mode
[Windows 2000] When you configure your computer to use an OpenGL screen saver and the System Standby feature in Advanced Power Management (APM), your computer may not start the Standby mode.
Glide API Features Disabled on Video Adapter
[Windows NT 4.0; I don't see why this doesn't affect Windows 9X or Windows 2000. The description is confused] After you install Windows NT 4.0 Service Pack 4 on a computer with a proprietary 3Dfx function library file (such as the 3dfxgl.dll file installed during the installation of id Software's Quake II), you may not be able to access your video adapter's support for 3Dfx graphics.
Windows 98 Components for Typical, Portable and Compact Setup
[Lists components installed, OpenGL is not installed in "Compact" installation]
Q176752 - Glen.exe Shows How to Enumerate Pixel Formats in OpenGL
The GLEnum sample provides a demonstration of how to enumerate pixel formats and method for checking the available pixel formats provided on your machine. The GLEnum sample is included in Glen.exe.
GLEN.EXE: SAMPLE: Pixel Format Enumeration in OpenGL Demo
Q169954 - INFO: Layer Planes in OpenGL
Layer Planes are a new feature in the Microsoft implementation of OpenGL 1.1. Before using OpenGL layer planes, there are several new functions and some driver dependency issues that you should be aware of.
Q160817 - Demonstrates OpenGL Texture-Mapping Capabilities
GLTEXTUR.EXE provides a demonstration of how to use a Device-independent Bitmap (DIB) as a texture-map for OpenGL by pasting a DIB (chosen by the user) onto three different OpenGL objects.
GLTEXTUR.EXE: SAMPLE: Demonstrates OpenGL Texture-Mapping Capabilities
Q154877 - OpenGL 1.1 Release Notes & Components
Opengl95.exe contains the release notes for OpenGL version 1.1 for Windows 95 and all of the components associated with OpenGL such as the DLL, library, and include files.
Note that Windows 95 OSR2, Windows 98, and Windows NT already include OpenGL with the O.S., so this download is not necessary (or recommended) for those platforms
OPENGL95.EXE
Q152001 - GLLT.EXE Demonstrates Simple Lighting in OpenGL
The GLLight sample provides a demonstration of how the various light settings effect an OpenGL scene. The initial scene is simply a single white sphere with a single blue light (GL_LIGHT0) shining on it.
Q151489 - INFO: When to Select and Realize OpenGL Palettes
An OpenGL application must select and realize its palette before setting the current rendering context with wglMakeCurrent.
Q148301 - GLTex Demos How to Use DIBs for Texture Mapping
The GLTex sample provides a demonstration of how to use a DIB (device- independent bitmap) as a texture-map for OpenGL by pasting a DIB (chosen by the user) onto all sides of a three-dimensional cube. [Appears to have been superceded by Q160817, code no longer here.]
Q139967 - GLEXT: Demo of GL_WIN_swap_hint & GL_EXT_vertex_array
The GLEXT sample illustrates how to use the GL_WIN_swap_hint extension to speed up animation by reducing the amount of repainting between frames and how to use GL_EXT_vertex_array extension to provide fast rendering of multiple geometric primitives with one glDrawArraysEXT call. It also shows how to use glPixelZoom and glDrawPixels to display an OpenGL bitmap.
Q139653 - PRB: Antialiased Polygons Not Drawn in OpenGL Antipoly Sample
The antipoly sample in OpenGL SDK BOOK directory is unable to draw antialised polygons with the generic implementation of Windows NT and Windows 95 OpenGL.
Q136266 - Demonstration of OpenGL Material Property and Printing
The GLBMP sample illustrates how to define the material properties of the objects in the scene: the ambient, diffuse, and specular colors; the shininess; and the color of any emitted lights. This sample also demonstrates how to print an OpenGL image by writing the OpenGL image into a DIB section and printing the DIB section. The current version of Microsoft's implementation of OpenGL in Windows NT does not provide support for printing. To work around this current limitation, draw the OpenGL image into a memory bitmap, and then print the bitmap.
GLBMP.EXE: Sample: OpenGL Material Property & Printing
Q131130 - HOWTO: Set the Current Normal Vector in an OpenGL Application
[Information on using the cross product to obtain a normal vector for a polygon]
Q131024 - Drawing Three-Dimensional Text in OpenGL Appliations
GDI operations, such as TextOut, can be performed on an OpenGL window only if the window is single-buffered. The Windows NT implementation of OpenGL does not support GDI graphics in a double-buffered window. Therefore, you cannot use GDI functions to draw text in a double-buffered window, for example. To draw text in a double-buffered window, an application can use the wglUseFontBitmaps and wglUseFontOutlines functions to create display lists for characters in a font, and then draw the characters in the font with the glCallLists function.
The wglUseFontOutlines function is new to Windows NT 3.51 and can be used to draw 3-D characters of TrueType fonts. These characters can be rotated, scaled, transformed, and viewed like any other OpenGL 3-D image. This function is designed to work with TrueType fonts.
The GLFONT sample shows how to use the wglUseFontOutlines function to create display lists for characters in a TrueType font and how to draw, scale, and rotate the glyphs in the font by using glCallLists to draw the characters and other OpenGL functions to rotate and scale them. You need the Win32 SDK for Windows NT 3.51 to compile this sample, and you need to incorporate wglUseFontOutlines in your own application. You also need Windows NT 3.51 to execute the application.
GLFONT.EXE: Sample: Drawing 3-D Text in an OpenGL App
Q127071 - MFCOGL a Generic MFC OpenGL Code Sample
Microsoft Windows NT's OpenGL can be used with the Microsoft Foundation Class (MFC) library. This article gives you the steps to follow to enable MFC applications to use OpenGL.
MFCOGL.EXE: Code Sample Demonstrates Using OpenGL with MFC
Q128122 - Implementing Multiple Threads in an OpenGL Application
It is possible to create multiple threads in an OpenGL application and have each thread call OpenGL functions to draw an image. You might want to do this when multiple objects need to be drawn at the same time or when you want to have certain threads perform the rendering of specific types of objects.
GLTHREAD.EXE: SAMPLE: Using Multiple Threads in OpenGL App
Q126019 - PRB: Most Common Cause of SetPixelFormat() Failure
SetPixelFormat() fails with incorrect class or window styles. [I'm not convinced this is the most common cause today.]
Q124870 - XFONT.C from SAMPLES\OPENGL\BOOK Subdirectory
XFONT.C from the SAMPLES\OPENGL\BOOK subdirectory is not in the MAKEFILE, and subsequently is never built.
OPENGL3.EXE: MSJ Source: Feb '95: OPENGL3.EXE
[The associated KB article Q124/2/06 has disappeared. This code apparently went with the Microsoft Systems Journal "Understanding Modelview Transformations in OpenGL for Windows NT"]
Q124034 - OpenGL Interface in Windows NT 3.5
This article defines and explains the OpenGL interface that is available and can be implemented in Windows NT version 3.5.
Q121381 - Microsoft Systems Journal: November 1994
This article lists the filenames and Snumbers for files available from online services that contain the source code described in articles published in the November 1994 issue of the "Microsoft Systems Journal."
CUBES.EXE: MSJ Source: Nov, 1994 cubes.exe
[This code apparently went with the Microsoft Systems Journal article introducing OpenGL with Windows NT 3.5: "3-D Graphics for Windows NT 3.5. Introducing the OpenGL Interface, Part II."]
Q121282 - OPENGL Screen Savers May Degrade Server Performance
If OPENGL screen savers are used on a Windows NT Server, network server performance (the Server's responsiveness to clients) may be degraded while the screen saver is running.
OPENGL.EXE: MSJ Source: Oct, 1994 opengl.exe
[Associated KB article Q119/8/62 appears to have disappeared. This code apparently went with the Microsoft Systems Journal article introducing OpenGL with Windows NT 3.5: "3-D Graphics for Windows NT 3.5. Introducing the OpenGL Interface, Part I."]

Archive

Q224792 - List of Bugs Fixed in Windows NT 4.0 Service Pack 1, 2, and 3
Err Msg: STOP 0x00000050 PAGE_FAULT_IN_NONPAGED_AREA
[Windows NT 4.0] When you run NetMeeting with sharing enabled, you may receive the following error message on a blue screen if you restart your computer and start NetMeeting again:
Q191359 - SMS: Windows 95 OpenGL Screen Saver May Cause Computer to Stop
[Windows 95 OSR2] Computers that are running Microsoft Windows 95 may lose their ability to safely shut down after the OpenGL or Mystify Your Mind screen saver is started and stopped several times. This may occur on computers that have the ATI 64 and ATI Rage Series video adapters installed.
Q189979 - OpenGL-Based Programs Do Not Work After Upgrade to Windows 98
[Windows 98] After you upgrade to Windows 98, your OpenGL-based programs may no longer work correctly, or may not work at all.
Q166334 - OpenGL Access Violation on Windows NT Version 4.0
[Windows NT 4.0] Under heavy stress, OpenGL applications may experience access violations. Also, OpenGl Line and Polygon texture clipping functions may fail when fogging is enabled.
Q166257 - Applications Using OpenGL Cause Access Violation in OPENGL.DLL
[Windows NT 4.0] A multi-threaded or multi-windowed application that uses OpenGL may cause an access violation in the Opengl.dll library.
Q166198 - Display Color Problem with OpenGL Applications in Windows NT 4.0 Service Pack 2
[Windows NT 4.0 SP2] After you apply Windows NT 4.0 Service Pack 2, coloring problems may occur with OpenGL applications where the wrong colors are drawn in a wide variety of situations. [See Q163677]
Q164158 - OpenGL Diffuse Settings Revert to Default
[Windows NT 4.0] When using OpenGL with Windows NT, the diffuse parameter changes back to the default when the color material changes from AMBIENT_AND_DIFFUSE to AMBIENT.
Q163677 - BUG: OpenGL Color Problems Using Service Pack 2 for Win NT 4.0
[Windows NT 4.0 SP2] When you use Service Pack 2 for Windows NT 4.0, various coloring problems may arise that are not present in previous versions. The coloring problems involve drawing the wrong colors in a variety of situations.
GLSP2FIX.EXE: BUG: OpenGL Color Problems Using Service Pack 2 for Win NT 4.0
Q160651
[pre-Windows NT 4.0 SP2] An application that uses OpenGL may crash with an exception 0xC0000090.
Q159129 - OpenGL Access Violation with Invalid OpenGL Context
[Pre-Windows NT 4.0 SP2] The API gluGetString causes an access violation and affects OpenGL operations.
Q156473 - BUG: Windows NT Version 4.0 Bug List - GDI
[Windows NT 4.0. Known bugs at time of release]
Q152841 - Windows NT 4.0 Service Pack 3 Readme.txt File (40-bit)
Q147798 - Windows NT 4.0 Service Pack 3 Readme.txt File (128-bit)
Access Violation in glsbCreateAndDuplicateSection API on PowerPC
[Windows NT 3.51 for PowerPC] When you install a OpenGL client video driver on your PowerPC computer running Windows NT and you run an OPENGL program, for example, the Windows NT Pipes screen saver, an access violation occurs in the glsbCreateAndDuplicateSection application programming interface (API).
Q134893 - 3D OpenGL Screen Saver Restores Windows NT 3.51 Help
[Windows NT 3.51] When you return to your desktop from any of Windows NT 3D OpenGL screen savers, any minimized Windows NT 3.51 Help files that use the Windows 95 Help engine are restored to full size.
Q134765 - Unknown Software Exception When Application Calls OpenGL
[Windows NT 3.51] An unknown software exception occurs when applications call OpenGL. When Windows NT attempts to shutdown the computer, a blue screen appears.
Q133322 - List of Confirmed Bugs in Windows NT Version 3.51
Q133220 - List of Confirmed Bugs in Windows NT Version 3.5
Q132866 - DOCERR: Printing an OpenGL Image
The documentation relating to printing an OpenGL image in the Win32 SDK versions 3.5, 3.51, and 4.0 is incorrect. The current version of Microsoft's implementation of OpenGL in Windows NT does not provide support for printing. More specifically, an application cannot call wglCreateContext or wglMakeCurrent on a printer device context.
Q132748 - Choosing a Workstation OS: Windows 95/Windows NT Workstation
Q128531 - README.TXT: Windows NT Version 3.51 U.S. Service Pack
Snow/White Noise with Mach 32 at 1024x768 - 65536 colors
[Windows NT 3.5] When you use the ATI Mach 32 video adapter driver included with Windows NT version 3.5, white haze (also known as snow) may appear when you move windows on the desktop. This problem can also occur when you use the 3D Pipes (OpenGL) screen saver.
Q126128 - Message Popup Changes Color When Using OpenGL Screen Saver
[Windows NT 3.5] When you run Windows NT with a 800 x 600 (256 color) or 1024 x 768 (256 color) video driver and test an OpenGL screen-saver, the Title Bar and OK button in the Messenger Service dialog box are red.