Yeah, i agree, we are probably not going to get rid of microsoft (but i surely want it to happend) …
However, about T&L and such things … the main difference here between OpenGL and Direct3D is that OpenGL was formed without thinking to much about what was actually in hardware. D3D is revised with every new generation of hardware to better suite the current situation, while OpenGL is a general solution of 3D grahics. OpenGL was done with the developer in mind, while D3D was done with the hardware in mind … that is, the current hardware, not the future hardware. That mean like now that the T&L unit was implemented in the GeForce, OpenGL as a general solution to 3D graphics could imediatly use it, while D3D had to be revised to be able to use. This is only because Microsoft had presupposed that the CPU should do the transforming and lighting. SGI didn’t make such assumptions, they thought of what kind of tools do the developer need to make powerful graphics easy and efficient. No thoughts about what was in hardware at the moment. This made OpenGL very complete all from the start and it has now gone from version 1.0 to 1.2 in almost 10 years. DirectX is soon coming in version 8, and it is still a much younger API!
This is the main reason why OpenGL rocks and D3D sucks. OpenGL is done with the developer in mind, D3D is done with the hardware in mind. This of course might make give D3D a slight edge over OpenGL in performance some times since it done to fit the current hardware. But i makes D3D programming a pain in the ass. It’s like you get best performance of programming in assembler, but 99% of the people out there prefer something like C/C++ because it gives you much simplier tools for the developer to do powerful applications. And since C/C++ like OpenGL is a general solution, it doesn’t lock you to a certain environment.
I also want to add my own experience:
Like 2 years ago when i first began to do to some 3d programs i looked for an API. First i considered DirectX, but it seamed rather complex. But then 3dfx was king of the hill so i check about there homesite so see if there was any information about programming for 3dfx. I found the Glide SDK and checked some info about it. It looked rather easy to use so i bought a Voodoo2, downloaded the Glide SDK at a couple of megabytes and started to code. I was up and running my first hardware accelerated program in an hour. And i liked it. But there were the problem that it would of course only run at 3dfx hardware, that was bad. But i sticked to Glide as long as kept had my Voodoo2. Later on when i thought about upgrading, the Voodoo3 spec was rather dissappointing, so i thought about buying an non-3dfx card, and last summer i bought me an G400. This made me again look for a API, and my thought was that i might be time to learn D3D. So i downloaded the DirectX 7 API at some 128 Megabytes (yes, i am a lucky guy with 10 Mbit/s Ethernet connection …) and started to read some documentation. After reading x^18 pages of docs i still didn’t have o clue how to get a triangle on the screen. So i searched the web for some simple example programs, but they seamed to be hard to find. So i read more docs and after x^18 more docs, lots of crasches and onehundredandfiftyeleven reboots my first DirectX app saw the light of the day. It changed the resolution to 640x480x32 … but i still wasn’t able to draw! I checked the examples included in the SDK and found out that the simpliest app was at 2500 lines of code, and it did only draw a rotating green triangle. But i thought “hey, this is microsoft code … let’s clean the mess”. So i started to clean up all i found unnecessary. I was able to reduce it to 1800 lines, but that was still far to much for me to get an survey of. So i gave up …
After some time i thought … hmm, what about OpenGL then? So, i started to read the documentation of OpenGL functions which came with VC++ 6.0. It seamed a little hard at the beginning … but after finding some examples on the net i was up and running a simple app, but i got into a lot of problems now and then. But, later on i found out that this wasn’t because OpenGL was badly designed, it was because the microsofts documentation included in VC++ 6.0 was badly designed. So i bought the “OpenGL SuperBible” book and made fast moving progress and i took me only a couple of days to solve all my problems a had earlier and have now progressed to creating advanced effects like reflection, shadows and such … just in a few weeks!
So, finally, my choice is easy, OpenGL is heaven. I hope DirectX suffers when it burns in hell.
Thank you for the word.
/Humus, happily married to a wonderful API.