VOGONS

Common searches


First post, by lizard78

User metadata
Rank Newbie
Rank
Newbie

Sorry if this is the wrong place to ask, I wasn't sure which forum to post this in (please feel free to move it if so). I'm developing a game with Windows 9x support currently and an OpenGL based renderer. My understanding (perhaps inaccurate) is that 3dfx cards never really had full official support for OpenGL and instead used a "MiniGL" wrapper. I'm currently contemplating supporting these cards in my application, but I'm really having trouble finding a detailed specification for MiniGL. I'm really looking for a list of OpenGL functions that were actually supported on the Voodoo 2 / Voodoo 3 drivers. Does anyone know where I mind find this documentation?

Reply 1 of 16, by Azarien

User metadata
Rank Oldbie
Rank
Oldbie

MiniGL is not an official specification the way OpenGL is. It's just a subset of OpenGL 1.1 defined as "whatever is needed to make GLQuake (or other supported game) to run because we don't feel like writing a complete OpenGL driver".
What parts of OpenGL are actually used by GLQuake can be determined by looking at its source, I guess.

Reply 2 of 16, by pan069

User metadata
Rank Oldbie
Rank
Oldbie

There might be some useful info here: https://fabiensanglard.net/3dfx_sst1/

MINIGL "STANDARD" […]
Show full quote

MINIGL "STANDARD"

Even though MiniGL was a subset of the OpenGL 1.1 standard, there was never a spec for it. MiniGL was "whatever functions Quake uses". Utility objdump running against quake.exe binary makes it easy to build an "official" list.

$ objdump -p glquake.exe | grep " gl"

glAlphaFunc glDepthMask glLoadIdentity glShadeModel
glBegin glDepthRange glLoadMatrixf glTexCoord2f
glBlendFunc glDisable glMatrixMode glTexEnvf
glClear glDrawBuffer glOrtho glTexImage2D
glClearColor glEnable glPolygonMode glTexParameterf
glColor3f glEnd glPopMatrix glTexSubImage2D
glColor3ubv glFinish glPushMatrix glTranslatef
glColor4f glFrustum glReadBuffer glVertex2f
glColor4fv glGetFloatv glReadPixels glVertex3f
glCullFace glGetString glRotatef glVertex3fv
glDepthFunc glHint glScalef glViewport

Reply 3 of 16, by lizard78

User metadata
Rank Newbie
Rank
Newbie
pan069 wrote on 2022-02-22, 19:45:

There might be some useful info here: https://fabiensanglard.net/3dfx_sst1/

MINIGL "STANDARD" […]
Show full quote

MINIGL "STANDARD"

Even though MiniGL was a subset of the OpenGL 1.1 standard, there was never a spec for it. MiniGL was "whatever functions Quake uses". Utility objdump running against quake.exe binary makes it easy to build an "official" list.

$ objdump -p glquake.exe | grep " gl"

glAlphaFunc glDepthMask glLoadIdentity glShadeModel
glBegin glDepthRange glLoadMatrixf glTexCoord2f
glBlendFunc glDisable glMatrixMode glTexEnvf
glClear glDrawBuffer glOrtho glTexImage2D
glClearColor glEnable glPolygonMode glTexParameterf
glColor3f glEnd glPopMatrix glTexSubImage2D
glColor3ubv glFinish glPushMatrix glTranslatef
glColor4f glFrustum glReadBuffer glVertex2f
glColor4fv glGetFloatv glReadPixels glVertex3f
glCullFace glGetString glRotatef glVertex3fv
glDepthFunc glHint glScalef glViewport

Wow - awesome! That is exactly what I was looking for - thanks! It's a surprisingly small subset actually, maybe about 20-25% of the spec overall for OpenGL 1.1? But it makes sense since they basically just took the functions Quake used and made that into the "spec". In my head I was thinking "It's probably OpenGL 1.1 without implementing all the silly stuff." but it's less than that even.

Thanks again!

Reply 4 of 16, by digger

User metadata
Rank Oldbie
Rank
Oldbie

The lack of a "formal" standardizarion of MiniGL was such missed opportunity. 😞

For a time, both the graphics accelerator manufacturers and other game companies were trying to follow id software with what they were doing with OpenGL. 3dfx and PowerVR would only bother implementing what Quake needed, and in response, other game development studios such as LucasArts tried to target this quasi-standard as well. The market wanted this standard to be formalized due to the (then) lack of a decent hardware-neutral alternative game-oriented 3D acceleration API. (Direct3D didn't cut it yet back then.)

Unfortunately, id didn't bother publishing or blessing such a standard (a simple newsgroup post or TXT document would probably have sufficed). They were probably of the opinion that OpenGL was the standard, not realizing that it would require a lot of effort for manufacturers and driver developers to put a lot of stuff in their silicon and drivers that games would never need.

As a result of that, Microsoft managed to conquer the market with Direct3D.

And the sad thing is that for quite some time, MiniGL was actually preferred by a lot of game developers over Direct3D, especially in its earlier incarnations.

It didn't have to be this way. All John Carmack had to do was publish that objdump output, call it MiniGL 1.0 and slap his formal blessing on it. That would probably have been enough to ensure that the game industry would have standardized on an open, hardware-independent and OS-independent 3D graphics API from the start. Even the XBox would probably be using some descendant of OpenGL or MiniGL as its 3D programming API today.

Reply 5 of 16, by leileilol

User metadata
Rank l33t++
Rank
l33t++

MiniGL's more of 3dfx's stopgap idea really. GLQuake was made on proper OpenGL hardware (Intergraphs) on NT at the time. Carmack had big Trinity (id Tech 3's early codename) plans set later that year with intent for requiring full GL spec compliance (Q3TEST flushing MiniGL for good 2 years later) so I don't think holding ICD progress back was in his best interest...

apsosig.png
long live PCem

Reply 6 of 16, by Zup

User metadata
Rank Oldbie
Rank
Oldbie

I don't know if that "standard" is complete... there were several versions of miniGL, that included more functions. The first one was able to run Quake, the later ones enabled to run games like SiN or Half-Life. Unfortunately, that site does not says which miniGL version is covered.

(Anyway, you should be able to use some dumping tools to get a list of functions exported directly from a miniGL driver)

I have traveled across the universe and through the years to find Her.
Sometimes going all the way is just a start...

I'm selling some stuff!

Reply 7 of 16, by kolderman

User metadata
Rank l33t
Rank
l33t
lizard78 wrote on 2022-02-22, 19:38:

My understanding (perhaps inaccurate) is that 3dfx cards never really had full official support for OpenGL and instead used a "MiniGL" wrapper.

Only V1/V2. V3 onwards had full OpenGL support.

Reply 8 of 16, by Jo22

User metadata
Rank l33t++
Rank
l33t++

^Makes sense. Thanks for the information!

I guess it's just that Voodoo 1 and 2 were those legendary add-on cards with the pass-through connectors what people associated with 3dfx/Glide.
Voodoo 3/4/5 was "some other card" to the average Joe, perhaps.

For example, back in the 2000s, I once had a Banshee-based graphics card for a while, but I didn't associate it with 3dfx, at all.

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 10 of 16, by Azarien

User metadata
Rank Oldbie
Rank
Oldbie
digger wrote on 2022-02-22, 20:08:

It didn't have to be this way. All John Carmack had to do was publish that objdump output, call it MiniGL 1.0 and slap his formal blessing on it.

Maybe he didn't want to limit the standard to his (current) needs? As you said, OpenGL was the standard, even if there are some questionable things in OpenGL 1.1 (like the color index mode or glInterleavedArrays which might have seemed like a good idea at the time).

On the other hand, such a "minigl" standard came into being in the form of OpenGL ES 1.0 specification, but that was much later (2003) and targeted mainly for mobile devices..

Reply 11 of 16, by Jo22

User metadata
Rank l33t++
Rank
l33t++
Azarien wrote on 2022-02-24, 08:13:

On the other hand, such a "minigl" standard came into being in the form of OpenGL ES 1.0 specification, but that was much later (2003) and targeted mainly for mobile devices..

Thanks for the info. Just checked. It's mind-boggling to think that everything took so long.

AutoCAD, AutoSketch and Autodesk Animator (Edit: 3D Studio, I meant) did exist since the 1980s..
And OpenGL wasn't released before June 1992.. The year Windows 3.1 debuted (unrelated?). How late! 😒
Terminator 2 came to the movies a year before.

It's hard to imagine that such simple xyz vector geometry wasn't implemented in a minimalistic hardware/API before.
I mean, for 2D, there were popular plotter languages like Epson or HPGL, at least.

Then, on the other hand.. Maybe it wasn't needed because math co-processors
were supposed to take the part of assisting the creation of a 3D scenery at the time ? Hm.
MMX also appeared in 1996 or so, when software-rendering was common still.

And then there were 8514/A and TIGA before - both high-level API standards, which didn't catch on sadly.

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 12 of 16, by spiroyster

User metadata
Rank Oldbie
Rank
Oldbie
Jo22 wrote on 2022-02-24, 11:35:
Azarien wrote on 2022-02-24, 08:13:

On the other hand, such a "minigl" standard came into being in the form of OpenGL ES 1.0 specification, but that was much later (2003) and targeted mainly for mobile devices..

Thanks for the info. Just checked. It's mind-boggling to think that everything took so long.

It took long on a PC to reach mainstream, however there were specialist accelerators (TIGA etc) but more importantly there were other platforms which were already very mature wrt 3D graphics.

Jo22 wrote on 2022-02-24, 11:35:

AutoCAD, AutoSketch and Autodesk Animator (Edit: 3D Studio, I meant) did exist since the 1980s..

AutoCAD was mainly 2D back then, although it did support TIGA and a few others, but the hardware was really specialist (1000's of dollars for a Matrox TIGA card) and not for the average PC user.

AutoSketch is 2D only anyway so didn't require any 3D operations.

3D studio... interesting, but limited PC resources meant there wasn't a huge amount over basic scene/models that could be done with it. Early 3D models for games maybe, anything else.. probably not.

While some software (CAD/3D modelling/rendering) was avaliable for PC platform, PC's were not considered the right tool for job until years later when they overtook speciailst workstations in price/performance. Their performance was completely dwarfed by that of competing platforms which were designed from the ground up to deal with this type of workload.

Jo22 wrote on 2022-02-24, 11:35:

And OpenGL wasn't released before June 1992.. The year Windows 3.1 debuted (unrelated?). How late! 😒

OpenGL was just an open industry standard of an already very mature IrisGL which only worked on SGI machines and had been doing geometric hardware acelearation for years prior.

Jo22 wrote on 2022-02-24, 11:35:

Terminator 2 came to the movies a year before.

Which was made on SGI.

Incidentally, IrisVision, was the first hardware to accelrate the entirety of the 3D graphics pipeline on PC, was made by SGI.

Jo22 wrote on 2022-02-24, 11:35:
It's hard to imagine that such simple xyz vector geometry wasn't implemented in a minimalistic hardware/API before. I mean, for […]
Show full quote

It's hard to imagine that such simple xyz vector geometry wasn't implemented in a minimalistic hardware/API before.
I mean, for 2D, there were popular plotter languages like Epson or HPGL, at least.

Then, on the other hand.. Maybe it wasn't needed because math co-processors
were supposed to take the part of assisting the creation of a 3D scenery at the time ? Hm.
MMX also appeared in 1996 or so, when software-rendering was common still.

Probably just the demand wasn't there. Average PC users didn't see any benefit or use for this technology, and the people who did need this technology didn't use PC's.

PC's were late to the game when it comes to 3D hardware acceleration, however when it did become avaliable, it brought the experience to the home for a 'relatively' cheap price, which wasn't possible prior.

Jo22 wrote on 2022-02-24, 11:35:

And then there were 8514/A and TIGA before - both high-level API standards, which didn't catch on sadly.

They did (there are quite a number of TIGA cards from various vendors which would imply some popularity), just not for games or what most PC users wanted/needed.

Reply 13 of 16, by digger

User metadata
Rank Oldbie
Rank
Oldbie
leileilol wrote on 2022-02-22, 23:40:

MiniGL's more of 3dfx's stopgap idea really. GLQuake was made on proper OpenGL hardware (Intergraphs) on NT at the time. Carmack had big Trinity (id Tech 3's early codename) plans set later that year with intent for requiring full GL spec compliance (Q3TEST flushing MiniGL for good 2 years later) so I don't think holding ICD progress back was in his best interest...

But would a well-standardized game-oriented subset of OpenGL, in the same vein as OpenGL ES as Azarien mentioned, really have held back ICD progress? It would have given OpenGL (being fully downwards compatible) a faster head start over Direct3D, which ultimately would have benefited OpenGL w.r.t adoption by the game industry. Aside from that, I don't see how that would have impeded OpenGL in the professional (non-game) 3D market.

Reply 14 of 16, by BitWrangler

User metadata
Rank l33t++
Rank
l33t++
spiroyster wrote on 2022-02-24, 12:48:
Jo22 wrote on 2022-02-24, 11:35:

And OpenGL wasn't released before June 1992.. The year Windows 3.1 debuted (unrelated?). How late! 😒

OpenGL was just an open industry standard of an already very mature IrisGL which only worked on SGI machines and had been doing geometric hardware acelearation for years prior.

It got onto Win3.x somehow though, not sure off the top of my head whether it came with WinG or Win32s... but with your fully pimped out Win3.x box you could run the OpenGL screensavers like pipes, which I think came from NT.

Unicorn herding operations are proceeding, but all the totes of hens teeth and barrels of rocking horse poop give them plenty of hiding spots.

Reply 15 of 16, by spiroyster

User metadata
Rank Oldbie
Rank
Oldbie
digger wrote on 2022-02-24, 16:06:
leileilol wrote on 2022-02-22, 23:40:

MiniGL's more of 3dfx's stopgap idea really. GLQuake was made on proper OpenGL hardware (Intergraphs) on NT at the time. Carmack had big Trinity (id Tech 3's early codename) plans set later that year with intent for requiring full GL spec compliance (Q3TEST flushing MiniGL for good 2 years later) so I don't think holding ICD progress back was in his best interest...

But would a well-standardized game-oriented subset of OpenGL, in the same vein as OpenGL ES as Azarien mentioned, really have held back ICD progress? It would have given OpenGL (being fully downwards compatible) a faster head start over Direct3D, which ultimately would have benefited OpenGL w.r.t adoption by the game industry. Aside from that, I don't see how that would have impeded OpenGL in the professional (non-game) 3D market.

There was Glide though, which itself is based on OpenGL. Quake wasn't written with any concept of miniGL (afaik), it's only because Quake didn't use Glide and 3dfx wanted to be able to support it to sell more cards ,that they created a miniGL driver. Then other developers decided to use miniGL's, perhaps to mitigate the need to use Glide or any of the many API's at the time since miniGL complient software would work with not only the top dog vendor at the time without haivng to support yet another API (and native at that), but all other vendors with OpenGL support.

3dfx created Glide for exactly the reason to not have to support OpenGL in it's fullest and nor was their hardware designed to do so (multi-viewport, many display lists, more than two multi-texturing etc.. voodoo was a cut-down 3D accelerator designed to push pixels as fast as possible for only one reason..games), they were just lucky that Carmack didn't use too many (if any) exotic features of GL, and probably annoyed that he didn't use Glide directly which only would have worked on 3dfx hardware at the time (which in itself, could be one of the reasons Carmack decided not to support a single Vendors API after being burned with Rendition).

OpenGL was already in wide use outside gaming in the world so it didn't need a head start, it just wasn't targeted at Windows games. And til this day, thats all Direct3D/DirectX targets. Other than xBox and Windows, the rest of the world (excluding Apple of course) uses OpenGL/GLES/Vullkan. Is there even a AAA Windows game these days which doesn't support Vulkan/GL as well as DirectX?

As the old saying goes... we have 10 standards for <insert subject here>, this is too complex/annoying, what we need is a new standard to unify them all... and then there were 11 standards.

The last thing PC gaming needed then was yet another standard/API for developers to support. Vendors would have loved the exclusivity though.

BitWrangler wrote on 2022-02-24, 16:54:
spiroyster wrote on 2022-02-24, 12:48:
Jo22 wrote on 2022-02-24, 11:35:

And OpenGL wasn't released before June 1992.. The year Windows 3.1 debuted (unrelated?). How late! 😒

OpenGL was just an open industry standard of an already very mature IrisGL which only worked on SGI machines and had been doing geometric hardware acelearation for years prior.

It got onto Win3.x somehow though, not sure off the top of my head whether it came with WinG or Win32s... but with your fully pimped out Win3.x box you could run the OpenGL screensavers like pipes, which I think came from NT.

Not hardware accelerated though. OpenGL was (and still can be) implemented in software (see Mesa3D). It's just a standard which provides description of interfaces, anyone can implement an ICD as long as it's API meets the standard and hopefully behaves like the standard says it should. It doesn't have to be done using hardware, although performance is lack luster when restricted to CPU... passable for simple scenes like pipes, but obvious as scene complexity and poly-count grows.

Microsoft originally wanted to support OpenGL beyond GL1.1 natively (it was the only one used on NT for a while) and worked with SGI (apparently) on Farenheight project to evolve the industry standard 3D technology. However at some point decided they wanted full control over the de-facto 3D API to be used on Windows and instead took a Rendermorphics API (Also used in CAD) and evolved it to be able to call it Direct3D. The rest is history.

IrisVision was hardware accelerated IrisGL (and later OpenGL) in dos. (https://en.wikipedia.org/wiki/IrisVision)

Reply 16 of 16, by kolderman

User metadata
Rank l33t
Rank
l33t
spiroyster wrote on 2022-02-24, 17:45:
digger wrote on 2022-02-24, 16:06:
leileilol wrote on 2022-02-22, 23:40:

MiniGL's more of 3dfx's stopgap idea really. GLQuake was made on proper OpenGL hardware (Intergraphs) on NT at the time. Carmack had big Trinity (id Tech 3's early codename) plans set later that year with intent for requiring full GL spec compliance (Q3TEST flushing MiniGL for good 2 years later) so I don't think holding ICD progress back was in his best interest...

But would a well-standardized game-oriented subset of OpenGL, in the same vein as OpenGL ES as Azarien mentioned, really have held back ICD progress? It would have given OpenGL (being fully downwards compatible) a faster head start over Direct3D, which ultimately would have benefited OpenGL w.r.t adoption by the game industry. Aside from that, I don't see how that would have impeded OpenGL in the professional (non-game) 3D market.

There was Glide though, which itself is based on OpenGL. Quake wasn't written with any concept of miniGL (afaik)

Quake was written initially for the Rendition Verite using their propitiatory API. Carmack then considered using Direct3D, but hated it so much so he went with OpenGL developing using an Intergraph workstation which supported OpenGL, but did not perform that well for games due to fill rate. Then 3dfx released the Voodoo1 which had a killer fill-rate, but Carmack was sick of all these different APIs and declined to port Quake to Glide. 3dfx then assigned a programmer to work with Carmack to develop a miniGL driver to get Quake working on the Voodoo1 by supporting the subset of OpenGL that Quake used. The rest is history AFAIK.