I'm in a pretty similar dilemma or even trilemma. I have a DX9.0 engine and when I see where Microsoft is going with DX 11+ I don't like it. They made that thing in the past - DX10 was exclusive to Vista and Win7, now DX11.2 is exclusive to Win8.1 and so on. I had a WinXP box and I was stuck to develop with DX9. Than I started to look in OpenGL direction, where I could use the latest version on WinXP.
I'm thinking about these things lately :
1. Is OpenGL in general(including OpenGL ES) is worth learning more than DX in the long run.
2. Is OpenGL game "market share" is growing ? How many devices and platforms I can target, if I invest time in learning OpenGL-like APIs. PlayStation 3/PS4, WebGL, Android, iOS, Linux, Mac and of course all versions of Windows ?
3. Is SteamOS and SteamBox, really going to affect the PC game market in favour to Linux and OpenGL ?
As a small indie developer, I need to know what is worth learning and what is going to fade in the future. I don't know exactly what platform I'm going to target in the long run.
Now I'm making a Windows game, tomorrow I could be making an iOS or Android game, or even a PS4 game. If I'm proficient in OpenGL style of programming can I be more competitive and flexible to jump between platforms.
Is sticking to DX11 ( and Win7/8 and eventually XBOX) is going to give me more than sticking to OpenGL 4+ and other OpenGL's to cover all the other platforms ?
At the moment I'm making a series of tools that I need in OGL. However, from time to time I add more bits to the game - which I've structured in the following way:
----------------------------- ---------------------- --------------
| | | | | |
| Winmain() creates a new | | | | |
| CWindow object which | | | | |
| is responsible for window | -> | Generic game code, | -> | OGL render |
| creation and converting | | which interacts | | functions |
| user input to a generic | | with -> | | |
| format, which is sent | | | | |
| to -> | | | | |
| | | | | |
----------------------------- ---------------------- --------------
The beauty of this structure is that I can create a WinRT/D3D11 version simply by replacing the first and last boxes above, which will account for a tiny fraction of the code base. I could also extend this further to run on Linux/OSX if I so desired.
The whole notion of either/or becomes moot with the above as I can target any platform/API - I'll simply extend the code as I see fit.