Disclaimer of warranty

This software is provided "as is" without any explicit or implied warranties. I accept no responsibility for any harm, loss, damage or any other change to the universe as a whole or any part of it, be it in your possession or otherwise, that may occur while having any sort of access to this software. This software is free. You get what you pay for. Use at your own risk.

Feel free to redistribute, but at no charge beyond covering physical media (if any), and without requiring user subscription.

Contents

General description
Requirements
Usage and configuration
The gamma helper
Tested games
Known issues
Technical status
New in this release
Where to download
Contact
Acknowledgments
Legal beagle
Glossary


General description

This is a Glide wrapper, ie a library that emulates the programming interface for 3dfx Voodoo hardware and in turn allows games specifically coded for it to run on other vendors' graphics cards. Specifically, this wrapper emulates the Glide 2.4 API and a beefed up Voodoo I card. It uses OpenGL to do so.

There's also some preliminary support for the Glide 3 API, but this isn't going very far. The Glide 3 emulation currently supports Diablo 2 quite well, but little else.

You don't use Glide directly. Games use Glide, but only if they are designed to do so. Nowadays, none are. Only old games from times where Voodoo cards ruled PC gaming support Glide.


Requirements

1)Hardware

The wrapper requires an MMX capable processor from your preferred vendor (read: anything sold in the last hundred years or so). SSE and 3DNow! are supported, but not required.

The number of correctly emulated effects will depend on your graphics card. Depending on the feature set of the card, the wrapper can work in three different modes with different emulation fidelity. Let's call them "tiers". Here's a little table that shows which graphics chips qualify for which tier:

Geforce
Geforce 2
Geforce 4MX
Geforce 3
Geforce 4Ti
Wildcat VP
Geforce FX
Geforce PCX
Geforce 6xxx
Radeon
Radeon VE
Radeon 7xxx
Radeon 8500
Radeon 9000
Radeon 9100
Radeon 9200
Radeon 9500 or higher
Radeon X300 or higher
Volari V5
Volari V8
DeltaChrome
OmniChrome
GMA900
(Intel integrated)
Tier 0 YesYesYesYesNo***Yes---
Tier 1 -YesYes-YesYes---
Tier 2 --Yes--YesNot yet*Not yet*Maybe**
*Theretically yes, but not with the current drivers. Expect severe rendering errors and crashes
**Untested
***Tier 0 operation is disabled for these cards due to backward compatibility issues in the drivers

Graphics chips that aren't listed in the above table aren't supported. They won't work with the wrapper at all. Sorry.

I recommend at least an ATI Radeon 9200 (w/o "SE" suffix!) or NVIDIA Geforce3 based graphics card for nice emulation quality and performance. But note that if you intend to use the wrapper's high resolution mode, these cards may not be fast enough anymore. Also, please keep in mind that a Geforce4MX is actually worse than a Geforce 3.
Any processor from 1GHz onward should suffice for virtually every Glide game ever made, perhaps with the exception of Ultima IX.

A "dream system" would consist of an AMD Athlon XP2500+, 512MiB of memory and a Geforce FX5900. GeforceFX cards have a slight edge over ATI cards and even Geforce6 series cards, because they support paletted textures in hardware, and that's very useful for Glide emulation. NVIDIA cards also have the upper hand in readback performance.

2)Software

Windows 98, Me, 2000 or XP.

Please make sure you have installed a current driver for your graphics card. Head here for Radeon cards, and here for Geforce cards.
In particular, if you're using a Radeon 9500 (or better) card, you really should be using Catalyst 4.1 or a more recent driver. Older drivers had issues with fog, smooth lines, and would even reproducibly hang in a few circumstances (like some particular shader that's generated when Wing Commander prophecy wants to enter flight). If you're using Win9x, which isn't such a bad idea for "retro" gaming, rest assured that Catalyst 4.3 has been tested extensively with the wrapper and works very well.

Speaking of drivers, some choices the wrapper will make will also be influenced by your graphics card driver settings for OpenGL:

If you never touched these driver settings, or don't even know where they are, everything should be fine. Default driver installations have the correct settings.
If you want to make sure, the basic approach to these settings is right-clicking on the desktop, selecting "Properties" from the menu that pops up, then open the "Settings" tab, then click on the "Advanced" button in the lower right corner. From here on it's different for ATI and NVIDIA users.
ATI users with the "classic" control panel should now open the "3D" tab and select the "OpenGL" radio button. The current OpenGL settings will now be displayed. To change them, check the "user defined settings" checkbox and hit the button right below it.
A faster way to get into the 3D tab is to right-click the little ATI icon in the systray (if it's there), select "Settings", then "ATI display settings".
If you use the "Catalyst Control Center", there won't be a choice between "OpenGL" and "Direct3D". The options will simply apply to both OpenGL and Direct3D simultaneously.
NVIDIA users should open the tab that has the little NVIDIA logo and the name of their graphics card on it. From the side menu, select the "Performance and Quality" entry, and the relevant options will show up in a listbox near the bottom of the dialog. There won't be a distinction between OpenGL and Direct3D in this dialog. The options apply to both of these APIs.

Usage and configuration

As you're reading this, you should have already run the wrapper installation, so you're basically good to go. A lot of Glide games should be running just fine with the default settings. For a list of tested games, see below. You should, however, fire up the configurator at least once and set a "resolution limit".

The configurator can do a lot more, though. You'll be able to configure global settings and application specific overrides for games you've run at least once (or I've run at least once; I've supplied a premade config that already "knows" a few titles).

configurator dialog

Works as follows:
Settings are organized into profiles. There's one profile for every game and additionally a global profile. The global profile will store your choice for every individual setting. It's the fallback plan for "unknown" games (i.e. games that don't have their own profile yet) and for incomplete per-game profiles. Yep, a game profile can be incomplete. It can contain just a few settings or none at all. The missing settings will "shine through" from the global profile.

The correct game profile, if it exists, will automatically kick in when a Glide game starts. You don't need to "activate" it before launching the game.

If you start a Glide game that has no profile yet, it will also run using purely the global configuration, and a new empty profile will be created for it, which you can then edit. These profiles will initially be named after the game executable ("something.exe").

You can select a profile for viewing/editing in the configurator's top left corner, using the radio buttons and the profile list. If you selected "Global", you're free to modify everything (we'll get to a description of the individual settings in a bit).

If you select a game profile on the other hand, most of the settings will initially be greyed out and can't be changed. This is the case for settings where the global configuration "shines through" because there's no override. You can modify a setting here only if you check the "override" check box to its left. Changes made to these per-profile settings will replace the setting from the global profile for the currently selected game only -- that's why they're called overrides. Later changes to the same setting in the global profile will not affect the selected game as long as the override is in place.

An override can be deleted from a game profile by simply unchecking the check box.

If a game profile is currently selected, you may edit its name. Make your changes in the text box in the upper right, then hit "Update name".

To make life a little easier the configurator is "WYSIWYG" at all times. The settings that actually will be used for a game can be a mix of global settings and profile specific overrides. The good news is that you don't have to switch back and forth between the global profile and the game profile to figure out what this mix is. The configurator will display the effective compound settings for the game you have currently selected.

Whew. It really is much harder to explain than it is to use. Play around with it some and hopefully you'll agree. But of course you still need to know what the settings do:

There's another option in a little box at the lower left. It wouldn't make much sense to have it per profile, so this one's global only:
Resolution limit - safe: depends, please read on
Set it to something your monitor definitely can handle. Most likely 1280x1024 for your regular 17 inch CRT. Even below this configurable limit, the wrapper will, of course, only use resolutions that the system thinks it can support. The whole point to this option is that the system may be wrong, or it may have been configured to not care.
So this can and should be used as a safety measure if you "unlocked" screen resolutions that go beyond your monitor's capabilites, or if you have an older monitor that has no way of telling the system back what it can do. Recall that the "try high res" option can turn a harmless 800x600 into a potentially lethal (to your poor display device) 1600x1200. The Glide wrapper will never switch to any resolution that's higher than what you select here.

And last, but not least, the buttons:

The gamma helper

You may wonder what this is good for. It's a small utility that lets you set your desktop gamma. This is useful for instances where a Glide game has crashed, and you're left with a desktop that's too bright. Though I've tried to prevent this from happening, it still does happen on certain cards and driver versions. For NVIDIA users in particular this can get pretty annoying, as the driver control panel doesn't seem to recognize that gamma settings are way off. The "restore defaults" button just won't take you back to your usual brightness levels. The gamma helper will, umm, help, and do so quickly.

If you need a desktop gamma of 1.0, you can just launch the gamma helper, hit ENTER and you're back to normal. You can set other gamma levels too, if you wish. The whole thing should be pretty self-explanatory.

If you're unsure whether you need this, chances are that you don't.


Tested games

The following list almost exclusively contains titles I've tested myself. I made it a policy to not include titles in the "fine" category if they were reported to work, but I couldn't verify that. I do that because the wrapper now has six different "code paths" for the different supported graphics cards, and just because a game happens to work on one of them doesn't mean it will work on all of them. So I'd rather do extensive testing first. Sorry if this seems arrogant, I'm just trying to be thorough here.

Stuff that works Notes:
1 requires tier 1 hardware to look good.
2 use "render to client window" option
3 likely much too fast, try the "pedantic" vsync option
4 does not run properly on Win2k/WinXP. Win98SE is recommended. Or give it a shot with compatibility mode
5 incompatible with systems that have large amounts of memory

Known issues

There are some species of games I'm well aware of that do not run through this wrapper more or less "by design".

Technical status

Some people may be interested in this information, and besides, I am always interested in bragging :-)
Feel free to skip ahead.
Not working

New in this release

Changes: version 0.84c posted Jun-19-2005 vs version 0.84b posted Jun-03-2005
Changes: version 0.84b posted Jun-03-2005 vs version 0.84 posted May-19-2005
Changes: version 0.84 posted May-19-2005 vs version 0.82b posted Dec-30-2004

Older changelog entries.


Where to download

My webspace is here. It's generally nice, and best of all, it uses the same brilliant color scheme as this document. The page dedicated to the Glide wrapper is this one. New versions will be posted there first.

By the way, if you skipped the previous section, you currently have version 0.84c, posted on Jun-19-2005. The configurator will also display this information.


Contact

Due to my ever capable ISP webmail (which won't let me store mail locally and won't keep it for more than a few weeks), I've lost a lot of valuable feedback. If you've sent me mail and I didn't reply, I apologize. Try sending it again :-)

But please don't use the old contact address anymore. It's dead. Comments, bug reports, praise and hate mail should go to ashopa 'at' gmx.de instead.


Acknowledgments

Thanks to all donors, and thanks to everyone who helped test stuff, reported stuff, suggested stuff. Without your feedback, this wouldn't work half as well as it does now.
Further mad props go out to (in order of appearance):
Cass Everitt c/o NVIDIA, for giving me a little shove in the right direction.
Nullsoft, famed creators of Winamp, for their awesome NSIS (the install system I have the pleasure of using).
The NASM project for their excellent software.
Special thanks to James for being such a good person in general.
Thanks to Mark for the sheer amount of testing he did, and for the "deny service" idea.
Thanks to Tim for being so patient and not giving up. And my apologies for the long time I left him waiting.
Thanks to Daniel for pointing out the flaws in my current w buffering code. Check out his work online here.
Thanks to Humus and Simon F for this ....

Legal beagle

All copyrights and trademarks mentioned herein belong to their respective owners. None of them belong to me. If that wasn't clear to you before reading this, you should be worried.

This wrapper is not based on any 3dfx source code. I've had a long hard look at the glide SDK documentation and used the glide headers for reference only. These things have been publicly available for a very long time, and to the best of my knowledge, it's not illegal for anyone to possess them. All of the code was written by myself, from scratch.


Glossary

Chroma keying - Compatibility mode - Tearing and vsync

Chroma keying

Chroma keying is a transparency technique. For every pixel that is about to be rendered, its texture color is compared to a "key" color and if there's a match the pixel is discarded. Otherwise rendering will proceed normally. This is similar to the blue-screen (or green-screen, nowadays) effects used in movies.

The following pictures should illustrate it nicely:
chroma keying on chroma keying off
Both are taken from Pandemonium 2. The image on the left has been rendered with proper chroma keying emulation, while for the right image it has been turned off. Chroma keying, in this case, discards all the black pixels. If chroma keying is not emulated, the black pixels will remain visible as seen in the right image.
The chroma key is not necessarily black. Glide allows applications to pick an arbitrary color as a chroma key.

Compatibility mode

Windows 2000 (with a little tweak) and Windows XP (out of the box) allow you to "emulate" behaviour of older Windows versions for applications that won't run otherwise.

How to unlock this feature on Windows 2000: Service Pack 2 or higher is required.
Click "Start", "Run". Enter "regsrv32 C:\WINNT\apppatch\slayerui.dll" (without the quotes). You can find further information here.

To use this feature, the first thing you need is a "shortcut" to the program. If you already have one, right click on the shortcut, select "properties", then open the "Compatibility" tab. Check the box and select the system you want to emulate from the dropdown list. "Windows 98" is your best bet. Click OK to save the setting and close the properties box. From now on, if you launch the program through the shortcut, compatibility mode will be in place.

Items in the "Start" menu are shortcuts and can be right-clicked and modified in this fashion. Some game installations also place shortcuts on the desktop.
If you have no shortcut to the program you want to try in compatibility mode, you can create one yourself: navigate to the folder where the program is with Explorer. Click and hold down the right mouse button on the executable file, then drag it to the place where you want to create the shortcut. This can be inside the same folder, on the desktop, or anywhere else. Release the right mouse button and a menu will pop up. Select "Create shortcut here". Done. You can now launch the program with the new shortcut, and you can bring up the shortcut's properties to enable compatibility mode. You can later move or copy the shortcut to other places, including the Start menu.

If you launch the program by double-clicking on the executable itself, you won't get compatibility mode. It will only work if you launch the program through a shortcut.

Note that you may have multiple shortcuts per program, and each shortcut has its own compatibility mode setting. If you want to be able to launch a program from multiple shortcuts (say, one in the Start menu and one on the desktop) with the same compatibility mode setting, you must modify them all.

Tearing and vsync

Tearing is a visual artifact that occurs when animated graphics are not synchronized with the display. Vsync can provide this synchronization, but at a performance cost.

Graphics cards render frames to an invisible "back buffer" while displaying another (older) frame from the "front buffer". Once a frame has been completely rendered and is regarded finished, the two buffers are swapped. The old back buffer becomes the new front buffer and thus becomes visible. The old front buffer becomes the new back buffer and the next frame will be rendered there. This is done to avoid making half-finished frames visible.

Graphics cards transmit the front buffer image to the monitor top down, line by line. If the buffer swap occurs in the middle of this process, you'll end up with parts of two (or more) frames visible on the screen at the same time.

E.g. if an application renders frames at 120 fps and the display refresh is 60Hz, the visible on-screen image will be a composite of two consecutive frames of animation. The top half of the image could come from the first, and the bottom half could come from the second of the two. And if there has been significant movement between them, the two "half-frames" won't quite fit together. You may notice a visible "breach" between them. This is referred to as "tearing".

Note that tearing can occur at any ratio between rendering and display frequency. Even if frames are rendered at exactly the display refresh frequency, buffer flips can still occur in the middle of the screen, and consequently you can still have a visible "breach" between frames.

Vsync exploits the fact that after transmitting a complete image to the display, top-down, there is a short period of time when nothing is sent to the monitor, before the transmission process restarts at the top. Vsync forces the buffer swap to fall into this "dark" moment, in effect eliminating tearing completely.

Because the graphics card must wait for the right moment to swap the buffers, activating vsync can reduce performance.