After reading the debate between Alex S. John and Brian Hook, I have
notice in a lot of reply from the readers, they were confused about the
difference between D3D-native games and OGL-to-D3D-wrapper enabled games.
Any half-witted programmer knows the difference between the two, but here
is my attempt to clear up this misconception.
As some people has believed, the D3DQuake.exe that was posted on the
Microsoft web server was a D3D wrapper for GLQuake. However, it was not a
wrapper. The D3DQuake.exe was in fact just a Quake map viewer, that is
programmed purely using the D3D API. To prove my point to those who does
not believe me, the D3DQuake.exe can be run on a system without
GLQuake.exe and opengl32.dll. As long as the map files exist in the Quake
directory, D3Dquake.exe will interpret the map files and render it with
D3D. So in a none technical way, this is how one can visualize it:
"map files --> D3Dquake.exe --> D3D driver --> render image"
As there is no Opengl32.dll ever involved during the execution, it's not a
OpenGL wrapper.
The first publicly available D3D wrapper for GLQuake was the one released
by S3. As most of us knew, it was pretty slow and looked bad. The second,
much was more successful than the first, was the Starfighter (i740) D3D
wrapper for OpenGL. It was a OpenGL library (opengl32.dll) that uses the
D3D interface to render the game. Normally, this is how GLquake can be
visualized to work on a 3Dfx:
"map files (game date) --> GLquake.exe --> OpenGL32.dll --> Glide drivers
--> rendered image"
And for educational purpose, this is how it works on rendition cards:
"map files (game date) --> GLquake.exe --> OpenGL32.dll --> Verite drivers
--> rendered image"
Please note that OpenGL32.dll is "card specific" file in these cases, as
to the "card specific" drivers also. OpenGL32.dll is like a direction
sign, telling the data where it should go to get processed. The
Starfighter OGL to D3D wrapper is actually a very good idea. It works
like this:
"map files (game date) --> GLquake.exe --> OpenGL32.dll --> D3D drivers
--> rendered image"
In this case, the OpenGL32.dll is universal, but the D3D driver is "card
specific". Since we all have to install D3D driver for our 3D accelerator,
and as long as the D3D drivers work, then we can all use the wrapper to
play GLQuake. Of course the picture quality varies depend on your D3D
driver and how well the OpenGL32.dll is programmed. Please note that
OpenGL32.dll was used in the process, therefore it is a wrapper.
Now, some of us have heard of Fahrenheit, it's MS and SGI's solution to
incorporate OpenGL "gaming" into Direct3D. It will probably work the same
was as the Starfighter D3D wrapper, directing the data to be processed by
the D3D drivers. Of course by them, driver programmer will have a pretty
hard task.
Please remember this is very simplified explanation of how OpenGL driver
works. It's intended for non-programmers like me.
Version: v1.0
Last Updated on: 3.9.98
Written by: Benjamin Wei-Chun Hsu Sponsored by: Wirehead Web Designs Copyright (C) 1998, Benjamin Wei-Chun Hsu