i think some people are messing up GPU and API
you had nvidia:
worked with directx 3.0 and openGL
T&L was a part of directX and openGL
you had 3DFX:
their API, also called 3DFX was superiour to directX
a 3DFX card worked with directX but slow, but with a 3DFX application (like tomb raider 1) it's a rocket.
3DFX GPU had their own API, so no T&L but the chip on a 3DFX card was a GPU.
their own API and killing mood of microsoft (who were pushing their directX) ended the 3DFX api, cards & company.
correct me, but don't flame me if i'm wrong
Well, is considered GPU (Graphics Processing Unit) a chip that could perform transformations following instructions, over being simply able to accelerate the drawing of some predefined elements: as such, T&L (Transform & Lightning) were the first form of operations performed by the graphics card itself, not simply by the CPU (it would become able to move or create polygons/light sources directly, instead of relying on CPU instructions to do so).
Early 3DFX cards were graphics accelerators: the geometry was computed by the CPU, coordinates would be sent to the card along with the textures, and the card would 'dumbly' draw all the polygons following the instructions.
T&L would allow the card to create an object, and transform the object directly in its framebuffer memory, completely bypassing the CPU. This would require a somewhat evoluted memory controller, due to it not being a simple Z-buffer and texture cache anymore. Object conceptualization, along with object manipulation capabilities (or commands) and memory control would make the card 'intelligent' and thus qualify all cards able to do TnL as being 'GPU's.
Glide was a proprietary API made by 3DFX, initially inspired by SGI's OpenGL (a simple OpenGL driver was available for 3DFX cards too, and it worked wonders for full-screen operations).
Direct3D was at first merely a half-hearted attempt by MS to create their own 3D API, but it stayed for a long time in the background due to several issues:
- less flexible than OpenGL
- much slower than Glide
- API changing all the time.
At first, you had many competing 3D APIs in the Windows world:
- OpenGL, for which Nvidia had a license: third-party programmers also created 'generic' drivers for other cards
- PowerVR, which is very different than others, for its rendering is tile-based (abandoned due to very divergent rendering methods, unpractical)
- Glide, which ran on 3DFX hardware only, but it was open enough that several Glide>OpenGL wrappers appeared and gave good results
- Direct3D, which... errr... sucked.
Now remain:
- Direct3D, which is slowly copying methods and flexibility first created for openGL
- OpenGL, which is not a 3D API anyway, but a very broad graphics conceptualisation language.
Most cards now support both, but with varying success:
- Nvidia cards are OpenGL champions, and are good at Direct3D stuff
- Ati cards scream in Direct3D and used to suck in OpenGL (they got better)
- Intel does Direct3D and OpenGL hardware, but it sucks anyway performance-wise
- Sis does Direct3D only (but their IGPs are even worse than Intel's)
- Matrox is in its own little world (although they seem to favour OpenGL)
When you do 3D, you usually do the following:
1- use OpenGL
- to do extremely precise rendering,
- to run on several systems - even handhelds (Win32/Linux/BSD/MacOSX/Solaris...),
- to use some very recent hardware features (OpenGL being modular, it allows new features to be used in a snap while still using the same language)
- to do anything that requires both 2D and 3D elements at the same time
2- use Direct3d
- to run software on Windows alone
- to get hardware capabilities and rendering resolutions
- to... errr... ensure your software won't work on newer OSes?
Some 3D engines actually allow the use of both languages, a famous (Free) one being OGRE.
Sometimes, to get the best performance, a game will require the latest version of DirectX/Direct3D to enumerate device capabilities automatically but will then do the rendering in OpenGL (ID software titles, for example) - which allows the software to be run on almost any other platform, at the price of some user inputs to compensate the lack of device capabilities enumerations...