I decided to create this topic because I feel that even amongst the regular forumites there is a lot of misunderstanding about directx and what it does. I am in no way an expert in the field but I'd just like to explain the most basic principles.
Directx is an application programming interface (API), it's a tool for developers to ease the process of creating code for applications, in this case, mostly for games.
The Directx API includes several components for 2D graphics, networking and input devices but most people here tend to use the term directx to refer to the 3D graphics component only, Direct3D, which is the most extensive part of the API.
A program in its most basic form is a series of instructions. Those instructions can be very simple or very complex but even the most complex instructions can be broken down into a series of basic instructions. What an API does is offer a series of complex instructions the developer can use without having to code every basic instruction behind it. Let me give you an example:
 consider a simple instruction called addition (+). It takes 2 parameters (2 numbers), adds the 2 numbers and gives you the result:
+ 3,4
result = 7
 now what happens if you'd like to do a multiplication but that instruction (*) doesn't exist? You split it up in instructions that already exist:
 + 3,3
 result = 6
 you take this result and,
 + 6,3
 result = 9
 you take that result and,
 + 9,3
 result = 12
So you can resume 3*4 to 4 additions of 3. What an API does is offer you the multiply (*) instruction to make it easier for you
How does this relate to Directx and 3D graphics?
Well, creating 3D graphics is no simple matter and even drawing a simple cube for example takes a lot of effort. You have to calculate the position of each vertex (8 points that define a cube) and project them on a 2D screen. What an API like directx does is give you the possibility to draw a cube with a single instruction and a few associated parameters like the size, position and rotation angle of that cube. So instead of having to process dozens of instructions, you can just do it with one single instruction and let the API handle the rest.
Having this is very handy but this doesn't speed up your program. The API will stil have to process every instruction, split it up in the most basic parts so that the CPU can handle it. That's where video hardware comes into play. If the complex instructions from the API can be supported in hardware by the video card, there is no more need to split it up into small components, you can just let the video hardware handle it.
In the early 3D days every video card had their own instruction set so developers had to write different code for every other card on the market. That's where directx stepped in. Microsoft defined a standard instruction set and cards supporting those instructions would be directx compliant.
Since then, every new version of directx has extended this instruction set to the point where it is mature like today. Since every basic aspect has been taken care of already, a new version makes less and less difference as a result. For example a new effect X may be supported, which is just a combination of effect A and B that were already available in a previous directx version. The only difference is that there is hardware support now so X wil run faster than when combining A and B.
What I am trying to say is that there isn't anything revolutionary about directx (10). It doesn't automatically make your games look better. It just provides the developer the tools to create more complex graphics at the expense of higher hardware requirements. Thsi also implies that you could make a directx 9 game look as good or better than a directx 10 game, it just takes a little more effort.
Log in to comment