The majority of people visiting this site are looking to learn a graphics API so that they can build their own 3D or 2D graphics engine.
However with the recent release of a number of new APIs the choice of which one to use isnít entirely straight forward, especially that some of the APIs are specifically designed and targeted at expert users.
Given that learning a single API is a very large undertaking it goes without saying that the learner would like to make the best choice possible so that they arenít wasting their time.
Iíve written the following small guide so that you can make the best informed decision on what you might prefer to learn.
DirectX 12 is an expertís API. It was written solely for developers who had already mastered DirectX 11 who require even more low level control of the rendering pipeline due to increased performance requirements.
The person learning DirectX 12 should generally already have written a very complex DirectX 11 engine and have thorough knowledge of all of its aspects.
If this doesnít describe your situation then you are better suited to learn one of the other APIs.
The focus of DirectX 12 is really around being able to parallelize your graphics workflow to take efficient control of all the GPUs at your disposal.
But to do so means writing large chunks of code to do even simple things that you could write with a single line in DirectX 11.
DirectX 11 is the leading industry standard graphics API. Even alongside DirectX 12 Microsoft released DirectX 11.3 at the same time knowing that the vast majority of people writing graphics engines would not have a
requirement for such low level control that DirectX 12 provides. DirectX 11 also has the same feature list as DirectX 12 so you arenít missing anything there.
Also in terms of support for coding from other programmers you will find the majority of websites and forums will concentrate on DirectX 11.
DirectX 10 was previously the best modern graphics API to learn 3D graphics programming with.
Its only disadvantage today is that it doesnít support hardware tessellation, however that is a minor issue.
The API was designed from the ground up with a primary focus on taking advantage of new hardware with a strong secondary focus on organization within the API.
Because of this focus on making the API well organized it lends itself well to learning 3D graphics programming.
This same organization was carried forward into DirectX 11 as well.
DirectX 9 and Below
DirectX 9 probably has the longest running history of usage amongst all the DirectX APIs. It was popularly used from 2002 all the way into 2011 when people started to finally migrate to DirectX 11.
Because of this you can find an incredible amount of resources on the net for it. However at the same time it wasnít as well organized as DirectX 10 and DirectX 11 and it has some limitations in taking advantage of modern hardware.
So in terms of learning I wouldnít suggest to start with these older DirectX APIs anymore.
Vulkan is the newest cross platform graphics API developed by the Khronos group. Just like DirectX 12 this is an expertís API.
It parallels the features offered by DirectX 12 and is equally complicated in terms of programming. This is not an appropriate API for the beginner.
If you are primarily interested in cross platform APIs then it would be better to start the learning process with OpenGL 4.
OpenGL 4 is the equivalent API to DirectX 11 in terms of features and modern hardware utilization, however its main advantage is being cross platform.
As well if you are primarily developing on operating systems such as Linux then this is your only choice for a high level graphics API that utilizes hardware acceleration.
And the changes in OpenGL 4 from its previous versions did not make it any more complicated to use or learn.
And for that reason I recommend this as the primary learning API for cross platform graphics development.
OpenGL 3 and Below
OpenGL 3.3 was the DirectX 10 equivalent that could handle cross platform.
Although this is a very capable and widely used API (with lots of web resources) I still recommend learning OpenGL 4.
Comparing the two APIs you will find the differences are minimal between them so it make sense to learn the most modern version.
Mantle is also an expert's API that was created by AMD. It was the first 3D graphics API released to give low level control over the GPU and was the driving catalyst pushing both Microsoft and the Khronos group to develop their own low level APIs.
However it only supports AMD graphics hardware which is incredibly limiting in a market that is dominated by Nvidia. I personally don't see any value in anyone learning this API.
Rastertek Website - Historical Tutorials
On the Rastertek website you will find the vast majority of the tutorials I wrote are in the historical section.
But most of those will not compile because Microsoft removed the DirectX SDK and replaced it with the Windows SDK.
It also deprecated the math library that was used in those tutorials so it is no longer available.
However the information in the historical tutorials is still good and all you need to do is update small portions of the code to use the Windows SDK and related libraries instead.
You will also see how to use the newer libraries in the DirectX 10 and 11 Series 2 tutorials.
The second series has less tutorials but at the same time it shows you everything you need to modify in the older tutorials to get them working.