Okay, now for my on-topic post.
The future of OpenGL… I think the fact that the OpenGL specification has been revised very little, overall, in what? over 10 years now?, says quite a lot for its stability and usefulness. As someone else pointed out, there are lots of “old tricks” in the existing spec that can be used rather creatively.
I’m pretty excited about the ratification by the ARB of the vertex_program and fragment_program extensions (and even more so that both Nvidia’s and ATI’s latest drivers support them, though fragment_programs is mysteriously absent from Nvidia’s 41.09 release, while ATI has both), which is partly due, no doubt, to pressure from the competition of Microsoft’s D3D8 and 9 features. However, there is probably more credit due to the games developers for pushing for these features in OpenGL. I know there are a great many developers who will most likely always refuse to use D3D for various reasons.
The main reason against D3D is portability, of course. If your application absolutely must run on the widest range of platforms possible with the minimum amount of re-coding, then the choice is easy: OpenGL. If you’re only concerned about Windows, it’s not so simple, since you no longer have the portability issue.
Another point strongly in favor of OpenGL: D3D is still, for all the work MS have done to simplify the API and make it easier to use than it used to be, a horribly complicated API to get up and running with. The amount of setup code you need to write – even still – is more than you really ought to have to do to get a darn library ready to work with. OpenGL is still the clear winner here, particularly since it’s just as easy to use from C as from C++. D3D can be called from C, but, since it was designed as a C++ API, implemented in C++, you have to explicitly reference the vtable in the object whose methods you’re calling. OpenGL doesn’t make you do that, since it was designed as a C API, so it’s usage is identical either way.
The biggest thing D3D has going for it, in my opinion, is it’s being one part of a suite of multimedia APIs. While you can use any of the suite independently of the rest, I think a lot of developers who use DirectX exclusively do so because after all the setup work to get the DirectX libraries ready to work with, they probably want to “get their money’s worth”, so to speak.
I think that OpenGL will always be with us, and will continue to gain features as the industry drives it to. D3D will continue to improve, with new features added there, too, and that will also drive some of the new features OpenGL will gain in the future. But, keep in mind that recent versions of D3D had lots of stuff pruned from them, while OpenGL has never (to my knowledge) had official, “core” features removed. The graphics card vendors’ driver implementations will also continue to improve, and all of us will improve our code, too.
I think there will always be some disagreement in the developer community as to which API is “better”. Which is “better” is really a matter of opinion – I happen to prefer OpenGL as a matter of course, while many of my colleagues prefer D3D. I’m probably biased because I learned OpenGL first, and when I first looked at D3D, it was really awful. That first impression is really difficult to overcome. Besides which, it’s only been recently that I’ve been doing work on the Windows platform (everything before was on one version of UNIX or another), and, since OpenGL is there and I know it already, I’m comfortable continuing to use it. I’ve played a bit with D3D, but I don’t think I’ll be making the switch any time soon.