I've been wanting to start learning DirectX recently but my question is to learn dx10 or dx11. I just recently discovered my card DOES support dx11 but I'm wondering...say I made a basic little 3d games in C++ and DirectX and compiled it and distributed it. What if the user doesn't have a card that supports DirectX11? Will they be able to play, it'l just force the latest version of DirectX supported for their card? Will they not be able to play?

It includes the fixed function pipeline which is far easier to learn for a beginner. 10-11 do not. 10-11 force you to use shaders.

It does also have shader support as 10-11 do to.

It is most widely supported on video cards.

The added features in 10-11 are not something that you will learn and/or implement easily anyway.

Did you know most games are dx9.0c still? My point is learn 3dmaths and things using fixed function in dx9, then when you're good at that step up to writing shaders in dx9. Then when you are master of that you can step up to dx10 but you will have to do more of the work using that api, a lot of studios don't think its worth it either.

Edited by EddieV223, 06 October 2012 - 09:40 PM.

If this post or signature was helpful and/or constructive please give rep.

probably getting ahead of myself again. but is it possible to code something in DirectX9, DirectX10, AND DirectX11?

I'm just asking this because I'm wondering how pro game dev teams create games that could be run under Windows XP, Windows Vista, and Windows 7, and that can be run under DirectX 9, 10, and 11?

I'm curious how this fits together because I've heard such like if you program something in like DirectX11, it cannot be used by Windows XP users, but if you're on Windows 7 you have to use 11, etc. and im just not sure what is true and what is not, so let me put it this way.

I wanna learn the API that could be used whether you are on XP, Vista, or 7, and no matter what DirectX version you are on...if possible?

probably getting ahead of myself again. but is it possible to code something in DirectX9, DirectX10, AND DirectX11?

I'm just asking this because I'm wondering how pro game dev teams create games that could be run under Windows XP, Windows Vista, and Windows 7, and that can be run under DirectX 9, 10, and 11?

I'm curious how this fits together because I've heard such like if you program something in like DirectX11, it cannot be used by Windows XP users, but if you're on Windows 7 you have to use 11, etc. and im just not sure what is true and what is not, so let me put it this way.

I wanna learn the API that could be used whether you are on XP, Vista, or 7, and no matter what DirectX version you are on...if possible?

I choosed DX11. In the future (1, 2 ... years later since now) many people will use Directx 11. If you like it or not you will have to change your version of DX. DX9 is going to be older and older. You should go with the technological progress. If Directx 12, 13 will came out, a big studios will bring to 11, 12 version etc.

My point is learn 3dmaths and things using fixed function in dx9, then when you're good at that step up to writing shaders in dx9. Then when you are master of that you can step up to dx10 but you will have to do more of the work using that api, a lot of studios don't think its worth it either.

Get to a master level, will take him a few years, then DX11 will be more popular than DX9. Learn a DX11 will take him a next month (or years). So, his skill with DX9 won't be useful anymore.

According to Steam statistics over 40% have DX11, and another 40% has DX10. I don't think you'll have any problems. By the time you finish your game most of people will have DX11 hardware.

If you're not going to use DX11 or DX10 features, then hardware can be DX9, DX11 API is able to run on DX9 hardware just as long as you don't use any features above DX9. Therefore you're only limited to OS your target audience is running (it must be at least Vista).

According to W3School over 50% have Windows 7, once you finish your game it'll be higher.

DirectX SDK has samples how to use DX9 and DX11 API in the same program, however they differ a lot, so I wouldn't suggest going this way, it's like making game twice.

If someone's computer isn't powerful enough to run Windows 7 it's definitely not powerful enough to run a game. Supporting WinXP users is like supporting IE6 or VC++ 6.0. Just let it die already.

Note that Steam users are not typical users. They are high end users when it comes to hardware.

If someone's computer isn't powerful enough to run Windows 7

There is some percentage of players that use legal OS, which means they might have WinXP (cheaper, they have it already, etc) even on hardware that could run Win7 without problems For me, I'm definitely not going to pay M$ once again just so I can play some game while my current XP works just fine. Also note those with legal OS are also more likely to actaully buy your game instead of pirating it.

Supporting WinXP users is like supporting IE6 or VC++ 6.0. Just let it die already.

The last time I checked WinXP userbase was higher than Mac+Linux users together. You can't compare it, even remotely, to IE6.

If you want to support Windows XP, learn DirectX 9.0c -- If you don't need to support XP, then learn the latest API (DX11) and limit yourself to using the appropriate feature level. If you want to make a game that supports older 9.0c graphics cards, but also takes advantage of newer hardware where it is available, then you need multiple rendering code paths to target different feature levels -- games have been doing this for ages, its not transparent, but its not any more difficult in DX 10 or 11 than its ever been, in fact it's probably simpler.

Decide whether you want to support Windows XP, then you have your answer.

Personally, if I'm targetting the kind of gamers who aren't your mom or little kids with hand-me-down computers, then I'd just target DX11 as an API and provide rendering paths for D3D10 and D3D11.

Pick DX 11 it is capable of handling all GPUs from DX9.0 through to DX11, DX11 supports something called feature levels. I would defenitly not start with DX9.0c now as DX10 and 11 are extremely different and DX11 can deal with all hardware anyway with one API.
DX9.0 is only interresting if you want to support winXP, but if this is just a hobby project I'd say go for DX11 and don't worry about DX9.0

The biggest problems he will face trying to learn 3d from anything after 9.0c is having to learn shaders from the get go, which you can't do if you don't already know the basics of 3d rendering/math. Especially the math. So how can you write a shader if you don't know vector/matrix math or even a single lighting formula? You're not going to.

Also, as a beginner to 3d rendering do you think he's going to make his own file format write to and load it( and write an exporter to your format from a 3d package), complete with all the data for 3d rendering as a beginner? Not likely.

This is why dx9.0c is better for beginners. You can load a .x file with one function call, and start with fixed function pipeline without having to write a shader just to draw an object. So you can learn the basic's of 3d math/theory with out having to know 3d math/theory in order to get a basic program up and going.

With the same version you can start writing shaders and use them when and where you want and use fixed function where you need to. So you can slowly move into shaders. When you're good enough at that, and think you can write your own file format for 3d meshes, you can work your way up to dx11/12 whatever is the latest.

No matter your choice, unless you're some kind of super genius it's going to take some time and a lot of baby steps to reach your goal. It's often suggested that a great way to learn all of this stuff is to work your way through history. Let me explain.

First games were like pong very simple graphics and game play. Then came the 90s when we had nintendo, simple 2d side scrollers and top down 2d games, however game play evolved and we got genres such as rpg's and shooters. They were still rather simple. Then playstation era came along with 3d graphics, the graphics were not amazing, often had blockly characters and bad animations but it worked. Then ps3/360 now we are getting into seriously complex games, true rpgs and first person shooters ect ect... If you notice that graphics complexity grows at a steady rate. As does game play complexity.

If you work your way through this, as a true beginner it will introduce new knowledge at just the right pace. So pick a game on the level of pong for a first game. Then a nintendo type game, then move up to more advanced stuff such as fixed function 3d and so on. If you think you're going to make the nextskyrim or any modern game you are not. If you get skilled and then join a major studio, then you will get to do your part. But these kind of games require teams of hard working professionals. So set a series of goals that you can actually complete, leading to your eventual goal.

If you already know 3d/math theory and are a competent c++ programmer I would completely suggest the latest dx11/12, but that's not the case, or is it?

Ps Skyrim is dx9.0c

Edited by EddieV223, 16 October 2012 - 01:17 AM.

If this post or signature was helpful and/or constructive please give rep.

The biggest problems he will face trying to learn 3d from anything after 9.0c is having to learn shaders from the get go, which you can't do if you don't already know the basics of 3d rendering/math. Especially the math. So how can you write a shader if you don't know vector/matrix math or even a single lighting formula? You're not going to.

Also, as a beginner to 3d rendering do you think he's going to make his own file format write to and load it( and write an exporter to your format from a 3d package), complete with all the data for 3d rendering as a beginner? Not likely.

This is why dx9.0c is better for beginners. You can load a .x file with one function call, and start with fixed function pipeline without having to write a shader just to draw an object. So you can learn the basic's of 3d math/theory with out having to know 3d math/theory in order to get a basic program up and going.

With the same version you can start writing shaders and use them when and where you want and use fixed function where you need to. So you can slowly move into shaders. When you're good enough at that, and think you can write your own file format for 3d meshes, you can work your way up to dx11/12 whatever is the latest.

To be honest you need to know basic 3D math before you start working on graphics if you don't stuff isn't going to make sense to you anyway ones you switch to it. You do not need lighting to start off with 3D programming, a basic shader is really easy to write and there are enough tutorials out there for shader writing.

File formats is sadly a non argument as there are enough file loaders out there, and writing your own obj loader isn't that much work either (like .x, .obj is also a text format).

No matter your choice, unless you're some kind of super genius it's going to take some time and a lot of baby steps to reach your goal. It's often suggested that a great way to learn all of this stuff is to work your way through history. Let me explain.

First games were like pong very simple graphics and game play. Then came the 90s when we had nintendo, simple 2d side scrollers and top down 2d games, however game play evolved and we got genres such as rpg's and shooters. They were still rather simple. Then playstation era came along with 3d graphics, the graphics were not amazing, often had blockly characters and bad animations but it worked. Then ps3/360 now we are getting into seriously complex games, true rpgs and first person shooters ect ect... If you notice that graphics complexity grows at a steady rate. As does game play complexity.

If you work your way through this, as a true beginner it will introduce new knowledge at just the right pace. So pick a game on the level of pong for a first game. Then a nintendo type game, then move up to more advanced stuff such as fixed function 3d and so on. If you think you're going to make the nextskyrim or any modern game you are not. If you get skilled and then join a major studio, then you will get to do your part. But these kind of games require teams of hard working professionals. So set a series of goals that you can actually complete, leading to your eventual goal.

If you already know 3d/math theory and are a competent c++ programmer I would completely suggest the latest dx11/12, but that's not the case, or is it?

Ps Skyrim is dx9.0c

The reasons games started off in 2D is not because the developers didn't know how to do 3D at the time, it's because the hardware wasn't powerful enough. Most of the math for 2D and 3D are the same, most of the time doing the math in 3D makes the 2D case easier, think depth for UI elements.

Like I said before I would still start on DX11 as it will teach you an API that's at least still going to be used a year or so from now, even with Win8 coming out, this will bring us DX11.1 not 12. The changes between DX11 and 9 are sadly to big to jump with out any significant difficulty so why add those when learning DX11 will be just as hard.

@Eddie, I'd argue that learning DX9 is not the kind of stepping-stone you claim that it is simply because its less complex or more turn-key. Both APIs, along with others like OpenGL, are so far from their mathematical and conceptual underpinnings that you're really just learning one set of domain-specific knowlege or the other. Indeed, starting with one technology as a stepping stone, simply because it seems more approachable at first glance, or because it predates the alternative, can in the worst case lead you to adopt a way of thinking and reasoning that is no longer relevant to the goal technology -- even if the technologies are closely related and might even form a true lineage, for example, starting with C is not an effective means to learning C++ or C#. There are fringe benefits to be sure, gained from additional experience and perspective, but the quickest and most efficient way to become a competent C++ or C# programmer is to just start with C++ or C#.

To be clear, I'm not saying that having C under your belt wouldn't aid you in learning C++ or C# more quickly, because it almost certainly will, but that learn_c_time + learn_cpp_time > just_learn_cpp_time. The fringe benefits I mentioned can be worth your while, but they can also be gained in either order, so it still makes better sense in my estimation to cut to the chase.

Suggesting to go DX9 in 2012. Nonsense.
Saying that learning shaders is a problem... yeah, having to keep in ming the hundreds different switches that make a FFP work is way easier...
I have to still support XP... so there's no choice for me. But shit, I'd jump on D3D11 every day of the week. I'd actually love to drop SM3 completely!