What is exactly wrong with OpenGL 3.0 ?
Everyone following the stories of OpenGL 3.0, has seen that there has been a great amount of disappointment with OpenGL 3.0, I decided to give my two cents on what had happened as well as giving people a bit of hopefully useful information to people.
Well, OpenGL has been around for over 16 years, and every new version had been maintining the backwards compatibility, approving extensions [which is the "Open" part of the OpenGL standard, it doesn't mean it's Open Source] and adding new core functions in every specification release. The core functionality of a version, has to be implemented to claim complete support for a version, and implementing extensions is optional. But the old design of OpenGL as well as lack of a global direction for functionality, caused the vendors to keep adding extensions to support their hardware’s specific functionality, and challenging the whole point of OpenGL being cross-platform and cross-hardware, since a functionality needs hardware as well as software (drivers) support, potentially leading to vendor lock-in in an “industry standard”. To find the extent of this issue, go and get an OpenGL SDK released by a vendor other than your own Graphics Card’s GPU vendor, and try to run the supplied samples.
Back in 2000, 3DLabs gave a very elaborate proposal for OpenGL 2.0 (I really suggest people to read it before proceeding, it gives you a really very good idea about the current and previous status of OpenGL as well as DirectX’s status back then) , almost all of these suggestions were rejected by OpenGL ARB (Architecture Review Board), causing huge disappointment for the developers, some additions did get approved, like the Vertex and Fragment shader language with a C-style langauge, that helped OpenGL 2 to compete with DirectX, but at the same time, OGL 2.0 was quite unlike an OGL developer’s cherished “OGL 2″ getting it nicknamed as “OpenGL 1.6″ by some. When 3DLabs was killed off by Creative (or rather, reduced to a tiny ”media accelerator” maker – probably completely pointless right now with the current and upcoming AMD and nVidia offerings), things started to really look grim for any serious innovation at OpenGL (though nVidia’s OpenGL support for was not bad)
Meanwhile, DirectX continued to gain momentum. Based on the feedback from the developers and Microsoft learning from their mistakes [which is kind of surprising from them] at DirectX 8, DirectX 9 really started to look like a good option, with a cleaner API, and good documentation, and it indeed became a major competition after the addition of Shader Model 3.0 (Though OpenGL still maintained a clear edge at tasks like Rendering Batches).
OpenGL 2.1 added some minor features. And Geometry shaders of DirectX 10, were approved as an extension. But it didn’t offer any support or extensions for things like Instancing.
And there came the announcement for OpenGL 3.0, as the 2007 Birds of a Feather presentation shows, was focused about making a clean break from the previous versions, a streamlined interface with an object model, eliminating the need for so many extensions, and setting up a framework for future features. It wasn’t even about adding DirectX 10 features, which was promised to be added some time after the release of OGL 3.0, it was meant to be compatible with a lot of existing GPU’s, it was about making code easier to write, a clean interface for getting the best performance and eliminating the overhead of what OpenGL old interface versus what the internal modern hardware really needed.
Plenty of people who wanted to start a project or do a rewrite of existing OGL code, chose to hold back on rewrite or even migration waited, trying to optimize their OpenGL code in the meanwhile. Things started to look even more promising when actual ARB members showed up at OpenGL.org and asked people for features requests and ideas for the new OpenGL…
Then there was a break in communication, making many people anxious, later revealed to have been the point, where the OpenGL ARB chose to scrap the object model, killing off almost everything that OpenGL 3.0 was told to be at OpenGL Birds of a Feather 2007. It was Jan, 2008.
When OpenGL 3.0 was released at August 2008, people where introduced to an OpenGL “3.0″ that :
- Required DirectX 10 class hardware, while Geometry Shader was still an extension, no sign of instancing , global uniforms which were DX10 features.
- Still maintained backwards compatibility with previous OpenGL code, no Object model, and there were still different performance paths for doing things that required extensive knowledge of the underlying hardware [and possibly vendors-specific code] to get the best performance possible.
- Nothing new besides rolling some extensions in as core capabilites as well as adding a “Direct State Access” Extension (which some of the ARB team begged people to go read), it lacked AMD and Intel from the contributors, not a good sign. Direct State Access, would eliminate many state-probing and setting, though able to eliminate a lot of the annoying state setting/probing functions, requires support from other vendors to be portable on various platforms.
- Introducing a deprecation model which marked much of the fixed functionality to be removed at the future versions.
Which though being an improvement over nothing has yet to prove itself to be anything beyond an incremental update. Because the pattern is very similar to OGL 2.0, except being far less significant. Deprecation model doesn’t really work well with big software companies with tons of existing “deprecated” code and they are pretty important for OpenGL ARB to say the least, you either have to fork the specs and fork the driver development and offer two completely different OpenGL code families, highly unlikely with OpenGL developers reaching an all-time low market share.(And ironically, Direct State Access, offers DSA interface for features that are marked to be deprecated from OpenGL and replaced with Shader code)
The release of specs was followed by an immediate outcry from loyal OpenGL developers, specially the one’s that had stalled new projects and rewritings because of the promises, it was followed by by a rush of ARB members trying to limit the impact, giving promises for inclusion of Geometry shader in the next iteration of the code, and promising the object model to become the highest priority (Giving a revolutionary promise for the third time), in further public relations acts Khronos lead told the theRegister that they intend to complete OGL 3.1 in six months, and blamed the CAD companies for the failing to deliver the promised features adding “Games are rebuilt every generation” (He failed to mention that the Graphics engines are not necessarily upgraded if the API is the same). Though another source (a gamedev moderator, which at least for me, is more reputable than Khronos or ARB members) reported AMD to be the reason for the cancellation of original OpenGL 3.0 and declined any direct involvement from the CAD companies (And to be honest, that does sound the sort of thing AMD would do, they have a history of making decisions that yield short term benefits but are wrong by looking at the bigger picture, Not supporting new functionality can also lead to the work of Driver developers, specially if they had just done a re-write, also their DX10 hardware was and is selling like hotcakes, Forcing OGL users/developers to migrate to DX10 hardware sounds like the sort of thing AMD would do, AMD has also promised a working OpenGL 3.0 Drivers along with the extensions). Also, OpenGL.org is also collecting and highlighting news and blog posts that would make OGL 3.0 look better, even going as far as linking to a very poorly written blog post that compared OGL 3.0 to KDE 4.0 (KDE 4.0 was about giving good performance and features and making a clean break FOR GOD’s SAKE, they only ran to a lot of bugs, and once debugged it can pose a serious threat to GNOME, which is unlike OpenGL 3.0 in all the points mentioned) that blog post also called DirectX “A multi-million dollar mistake” and claimed a huge interest in OpenGL.
Overall, as a result of this whole ordeal, OpenGL probably lost forever to DirectX in the competition of offering features and performance on Windows, that should lose cost OpenGL almost all the game developers (Most of the Linux users who want serious gaming, already have Windows to play demanding games when they take a break, which also allows for rebooting) also OpenGL ARB lost their trust and respect from the OpenGL community as can be observed in the thread following the announcement, OGL’s market share is sure to take a hit, and with even less repect (I think the most crucial thing about the original OGL 3 was that it would have been taken seriously, and that would promise a lot of support and useful feedback from developers, as well as serious support from vendors, but this OpenGL 3.0 did quite the opposite effect)
As for me as someone who has a certain knowledge of Computer graphics algorithms and hardware, I will still try to make a logical choice on choosing API according what I need, if I want a cross platform API for my development, I will go for OpenGL, if a good number of the people at whom my program is aimed can be expected to use DirectX and it is a demanding program, I will go through the trouble of learning DirectX and not bothering with OpenGL…
Comments/corrections will always be welcome.
-Unknown identifier
Tags: Computer Graphics, Game Development, Opengl