I will start with saying that I began learning 3D graphic programming with the DirectX 9 APIs and managed to stay a little up-to-date with changes brought about with DirectX 11. That being said, a few years ago I had decided to use the OpenGL APIs for when/if I started development of Omega Connection and have mentioned this decision in a few recent posts (now that I’m actually working on the game). The decision came down to a few reasons:
1. DirectX is only supported on Microsoft platforms. This means Windows and Xbox One. Although Microsoft still owns the home PC operating system market, the ability to port to other gaming systems seems like a pretty big thing to me.
2. Games written specifically for OpenGL (not ported from DirectX) perform as good or better than DirectX. We’ll just call this a fact, because any of your examples are going to be games originally written in DirectX and then cross-platformed to OpenGL. Sorry. but it’s true.
3. Microsoft is notoriously horrible with bringing new versions of DirectX (with newer, better capabilities) to previous versions of Windows, DirectX 12 being only available for Windows 10 and Xbox One as an example. Whereas OpenGL support comes from updates from the GPU manufacturers and as such I am more likely to see a good chunk of new features available on my Windows 7 PC with OpenGL vs DirectX. I might need a new GPU to use OpenGL 4.5 features, but I am more comfortable upgrading my graphics card than switching to Windows 10 AND then finding out I have to upgrade my graphics card.
4. Ultimately I will not be writing this game entirely on my own and it is easier to find higher quality OpenGL programmers than DirectX programmers. Just one of those things I have discovered through experience. If I posted an employment ad for a C++ DirectX programmer and one for a C++ OpenGL programmer I would probably receive 10 DirectX applicants for every 1 OpenGL applicant, but I would feel MUCH more confident in the ability of that OpenGL programmer. Effectively there are more “Become a Game Developer NOW!” mills teaching DirectX.
Thus I chose OpenGL as API of choice a few years back; only now, things have changed a bit. Since I made that decision there have been a few “big” changes in the world of graphics APIs. Apple stopped support for OpenGL with version 4.1 and as they are the manufacturer for their GPU hardware this means I would be limited to features available in 4.1 or prior. Instead, Apple is pushing their own graphics API, Metal, to the game development industry. For many of the same reasons mentioned in regard to DirectX this seems to push Metal out of contention for an initial graphics API.
The bigger change is from the introduction of the Vulkan specifications. Vulkan is touted as a cross-platform graphics API with support for all versions of Windows and Linux, with the additional support for Valve’s SteamOS (gaming platform) and Google Android. Whether Apple ever decides to support Vulkan has yet to be seen and I suppose it will depend on whether game makers other than Blizzard actually write smash hit games for Metal or not. The real reason Vulkan is important in this context is because the specifications for this graphics programming system are maintained by the Khronos Group.
As you are probably already aware, the Khronos Group is the same body who maintains the specifications for OpenGL. So what does the introduction of Vulkan mean for the future of OpenGL, especially given that a company like Apple has stopped support with version 4.1 and OpenGL drivers for Linux are limited at best? That’s a problem question for me, as Vulkan is a new standard with relatively untested drivers and APIs. In my opinion if Vulkan succeeds, OpenGL could be a thing of the past for 3D Game Development within a few short years. On the other hand, if it fails then OpenGL will still have much life blood left to offer.
Given all that, I can see a few options for Omega Connection, with Pros and Cons to each.
1. Stick with OpenGL. It is far easier to remove/replace the functionality missing in 4.1 if I decide on an Apple port and OpenGL is still one of the most widely used cross-platform standards. However, there is still the likelihood of having to replace OpenGL within a few years.
2. Forget everything I said above and go with DirectX. Granted all the cool functionality is only available in DirectX 12, so that limits everything to Windows 10 and Xbox One, but DirectX 11 is still acceptable. I’d have to give up on cross platform anything, but if there is demand once Omega Connection is released it is still possible to port the graphics programming system over to something like Metal or OpenGL to reach Apple and Linux respectively.
C. Use Vulkan as the 3D graphics API. There will be a bit of a learning curve going with an unfamiliar API, but most programmers are used to that. There is also the potential for Vulkan support to fail, which would lead back to porting it all over to one of the two choices above. This option also leaves Apple completely off the table, at least for the time being, but I’m not Blizzard so I suppose I can just call Apple users elitist snobs not deserving of a good game. I’d like to avoid that if possible though.
I’m hoping for suggestions and comments from the rest of the C/C++ independent developers and game developers out there. I’m still at a point where it is easy to switch, so some feedback here or on Twitter @OmegaConnection would be greatly appreciated. Thank you in advance!