I would only go down that route if you think you'll really benefit from the reduced CPU overheard and multithreading capabilities, or if you're looking for an educational experience in keeping up with the latest API's
So is that how DirectX Development will work these days? DirectX 11 to get shit done relatively quickly and DirectX 12 to have multithreading capabilities?
I suppose you could say that. Technically, you can "get stuff done" in DX12 relatively quickly if you've mastered it already. The "slow" part is learning DX12.
"That's progress for ya". DX10 & 11 are more difficult to learn than DX9. DX12 is more difficult to learn than DX11.
It's even more annoying for me because I'm trying to move from XNA, and I went to DX11 in order to get a foundation for OpenGL 4.5 and I'm currently rewriting my "engine" in OGL 4.5. And OGL 4.5 would probably be just fine for me and I could just stick with that. Except: progress. If I don't want to get behind the curve, it's time to start learning Vulkan soon. That's basically the OGL equivalent of DX12. It's so radically different that it's not even called OpenGL anymore but Vulkan. And to learn it, I figure I'm going to have to go backwards and learn DX12 in order to learn Vulkan. I expect there will be better instruction and more books on DX12 than on Vulkan much like DX11 compared to OGL 4.
OGL 4 is a lot easier than DX11, but you would never know that by reading the OGL books. They make it about 1,000 times more complex than it needs to be and I wouldn't have a clue what they are talking about if I didn't already know it from DX11. Learning DX11 in order to learn OGL was the right decision. You're learning something far easier, but basically there is very little good instruction in the OGL in terms of books. Although I have my complaints about the DX books, they do tend to be more informative and better written and most importantly far more numerous.
So, in order to learn Vulkan, I'm probably going to read Frank Luna's DX12 book. I already have it, just haven't had time to read it and more importantly I'm on Win 7 and need to build out an entirely new computer and install Win10 in order to do DX12. (Real shame, because I already compiled the code for a Vulkan tutorial on my old machine and Vulkan runs fine on my 3 year old graphics card in Win7. Microsoft is pretty aggressive in trying to force you to stop using Windows 7 in pretty much every way they can be.)
Another issue is that there's a lot more books out for DX11 than there are DX12. As far as I know, there's pretty much only Frank Luna's book for DX12, which is probably the one you would want, if you were going to pick authors of DX11 books to write a DX12 book. But there are about 4 times that many books for DX11. (Yes, that means there are 4 DX11 books. Ok. Maybe you can find 1 or 2 more, but 4 give or take a few.) It's a daunting task to learn DX just because there's so little info. I'm not even really that crazy about Frank Luna's stuff. He kind of assumes you're already intermediate level with DX. It's more like a text book where you are expected to get most of the knowledge from the instructor rather than the book. By itself, I never could learn this stuff from Frank's books. And I think his are the best. So, that says a lot. Fortunately, I already mostly know DX11, so I expect to get a lot out of his DX12 book.
But anyway, yep. DX11 is a bit easier to learn and if you already know it you can immediately crank stuff out. There's a lot more instruction out there to learn DX11. And you don't get into all the multi-threading and stuff which many programmers are terrified of. I haven't done any DX12 yet, but my understanding is there's a little more code for your engine in DX12, but day to day DX12 coding isn't going to be any different than DX11 speedwise or anything else. Your engine will have to know how to manage threads and stuff which will probably require several extra pages of code, but I don't expect DX12 to be more time consuming to work with than DX11 once you've mastered it and got your engine code written that you will reuse for every project you do. And even the engine code I would expect won't be that much more. Just more stuff to manage and a few more steps in getting things to render.
I noticed Frank's DX12 book really is not thicker or different from his DX11 book. You do things a bit differently. But if you already mastered DX11, DX12 shouldn't be that much different.
To "get stuff done relatively quickly" I would either use C# and MonoGame (or a game engine like Unity or Unreal) or C++ and OGL 4.5. But it seems to me that once you get your engine written it's pretty much all the same. MonoGame basically allows you to skip the part about writing your own game engine/framework and you're ready to get to work. OGL uses libraries for everything to the point of making it pretty quick to throw your game engine together. With DX11 and especially DX12, there's a lot more work putting it together without libraries. There is the DX Toolkit and whatnot, but my DX approach (especially for learning purposes) has always been to do pretty much everything from scratch and use nothing but standard C++ and DX itself. OGL lends itself to using libraries more than DX I think. You kind of have to use libraries with OGL to make it cross platform unless you want to learn the deep stuff on every platform in existence. DX doesn't do cross-platform, so there's a lot less reason to use libraries and you only have to support Windows, making it far more practical to learn Win32 or whatever to actually do it as opposed to OGL where you call GLFW in order to manage processes and windows and such.
So, no. I would not recommend DX11 for "Getting stuff done quickly". But it's probably the best way to start learning DX12 since there's more info about it out there and it's slightly less complex. But even DX11 is kind of jumping off into the deep end of the pool. Most people stuck with DX9 for about a decade after DX10 came out because they were terrified to go to DX10 because of shaders and the increase in difficulty using it. (DX10 and DX11 are pretty much the same thing.) I think you can still find some people coding in DX9 out of fear to going beyond that.
To sum it up. DX11 is probably the way to go if you already know how to use vertex and index buffers as well as having a basic familiarity with HLSL. If you're not at that level of experience yet. You probably need to go get that experience somewhere before even trying to learn DirectX of any flavor. I used XNA to get there. Now that's been replaced by MonoGame. Once you know that stuff, you can learn DX11 relatively quickly (I pretty much taught myself at that point). And it's a good stepping stone to learn DX12. If there was an easy way to jump straight into DX12, I would just do that. But I don't think there's instructions out there that make that easy. Learning DX11 first gives you the prior knowledge to be prepared to take the next step into DX12. But I think if you know DX12, you won't find DX11 code any faster to write, or all that much easier really.
Edited by BBeck, 24 July 2016 - 08:49 AM.