How did we go about creating Dynamic Linked Libraries (dll's) for GLQuake drawing? A brief synopsis
1. We grepped the heck out of the Win32 GLQuake source to search for all functions having anything to do with the rendering pipeline. Surprisingly, this yielded a relatively small number of functions to work with... Encouraged, we plowed forward.
2. The next step was to pull these rendering functions out of the main GLQuake source (though not out of the GLQuake project). This too was a fairly simple task, and our ego's soared.
3. Then we began to creating the dll. Removing the rendering code from GLQuake proved difficult due to a large number of global variables. This difficulty was remedied by simply passing the globals as parameters to the drawing functions. New functionality was then added to the dll's to accomodate for each one's initialization and destruction. Code was also added to GLQuake to open the dll's.
3.5 The parameters for each renderer were implemented as new C-var's, and initialized with each renderer. Adding and removing these on the fly was quickly cobbled into GLQuake.
4. The only core drawing feature severed from GLQuake was the implementation of Multi-Texturing. Certain graphics cards were having a difficult time with the multi-texture functionality of NPRQuake, and we have therefore forced all cards to draw both the light-mapped poly and the wall-poly as seperate objects (see the specific renderer's page for details).
That's it! That's all we did - simply removed the drawing code from within Quake and placed it in an external Visual Studio project. Adding new renderers is a snap, as it requires simply compiling a new dll. A quick jump to the How do I make my own? page should get you up and running in no time.