OpenGL, DirectX and their ‘issues’

Although this article is almost seven months old ( link ) there are some legitimise issues that have been raised regarding OpenGL particularly in the context of where right now OpenGL is going through some major issues; OpenGL ES 3.1 is an improvement but you still have a fractured framework where you have OpenGL on the desktop but OpenGL ES on the embedded device but given the peculiarities there isn’t exact compatibility so as a developer if you want to target both platforms then you’re going have to deal with ‘issues’ – programmers want to keep well tested code that has been debugged and put through its paces but to maintain separate lines of code to support OpenGL ES and OpenGL, deal with the implementation bugs not to mention that if you’re going to have OpenGL on the desktop then you’re dealing in the Windows world with vendor specific implementations of OpenGL with varying degrees of support not to mention each with their own unique set of bugs and quirks.

In the OS X world the situation isn’t so bad because the OpenGL resembles closer to DirectX in that the whole OpenGL stack is provided by Apple meaning for a developer doesn’t have to deal with the issues of compatibility (or at least in theory – drive issues can result in issues appearing in games or user interface quirks). So on OS X you have OpenGL and iOS OpenGL ES with plenty of the issues mentioned in the link at the top covering many of the problems that have more to do with OpenGL in general (both iterations) rather than something that is uniquely a Windows, OS X, Android or iOS problem. I’m unsure how true the argument is but it is understandable that OpenGL (and by extension OpenGL ES which is a subset of OpenGL) was originally designed by SGI and embraced by the CAD and other ‘professional class’ software vendors and unfortunately the net result is every attempt to clean up OpenGL and make it a better framework for game developers to use there is a backlash from the traditional heartland of OpenGL and thus we have the whole saga of ‘Long Peaks’ that was supposed to address the long standing issues but was later scaled back to something that is more modest. Fast forward to 2015 and we still have to divergent frameworks that hang around not because of love by developers but because the lack of a really viable alternative particularly in the mobile space.

The reason why the mobile space has come up is the constrained environment necessitates having a framework that is as efficient as possible which can take advantage of the GPU provided. Apple has come up with its own solution and that is the development of what it called ‘Metal’ which does away with the nicety of a high level API such as OpenGL and instead gives developers the lowest level bare metal. Although OpenGL ES 3.1 has come to Android and iOS the performance is never enough – to squeeze out that extra performance Apple developed Metal and rumour has it that Google/Android will eventually develop something similar although it would be more difficult due to the heterogeneous nature of the hardware it would be very difficult to nail something down.

So what is happening on the OpenGL front? Well, at the last SIGGRAPH conference there was a big announcement of what the Khronos Group has called ‘OpenGL NG’ (OpenGL Next Generation) whose goal is to replace OpenGL and OpenGL ES with a single framework that spans from smartphones to workstations, from game consoles up to desktops and beyond. Rather than having two incompatible frameworks not to mention hauling around 20 years of backwards compatibility meaning OpenGL NG will offer a clean break from the past with lessons learned but a clean ground up framework which will hopefully also address the laundry list of problems that game developers have been writing about OpenGL.  The big problem though is this, we’ve already been down this road in the case of ‘Long Peaks’ where the same sort of problems was made but alas never delivered upon and here we are as end users and developers dealing with the fall out of an unfortunately choice of either wanting to be multi-platform and dealing with OpenGL ES/OpenGL or having a smooth sailing development experience and having to accept that for all the benefits of DirectX that what you give up in the process is that multi-platform  (between Windows and non-Windows operating systems).

Just having a look through the work they’re doing with DirectX 12.0 and WDDM 2.0 coming to Windows 10 (in all its forms) along with the promise of end to end feature parity it really does start to put the pressure on the OpenGL world to put aside their petty squabbling that has undermined giving OpenGL the overhaul it needs in favour of just getting something done. When faced with a unified platform strategy and games companies can target DirectX 12.0 – a game engine that they can reuse whether it is running on a Windows Phone device, Xbox or desktop then some developers might just say that the lack of flexibility in terms of platform independence is worth it in the long run if it means not having to deal with the soap opera drama of the OpenGL development cycle.

This is one of the reasons I’m having a look at maybe in the future at getting a Dell XPS 8700 desktop (or what ever the refreshed version is in 6-10 months) along with a 27inch screen – the power supply is good enough if at a later date I feel like upgrading the video card to something like a nVidia GTX 970 or upgrade to a pure SSD setup (although a 2TB hard disk is good enough given that one can easily replace or upgrade given that we’re dealing with a tower case rather than all in one computer such as an iMac). It will be interesting to see what the spill over benefits of DirectX 12.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s