Well, I think it's safe to say that Frob nailed it with one statement; a statement that should run though the minds of any business oriented person. I honestly think it says more than what everyone else can say in one paragraph or more.
Define your target market, the answer will follow.
Totaly this, but, if you do not need to give up any feature, go as low as it gets.
I myself find d3d10+ a trappy library pointing you to tehcniques that usualy (nearly all of them) seriously damage performance - if you actualy use them.
The only thing I may need to drop dx9 for in the future is the shader model 3.0 limit. I have not needed higher shader model, I instead reformed my rendering to be more sane instead (no 25 interpolated atrributes for pixel function and such).
For me, sticking to standard routines and constructing with them, seems to make me create faster software, even if I need to perform redundant draws, targets, than issuing with some "amazing" instruction of dx11. I do not sample texture in vertex function, I do not render to vertex buffers, I do not alter device coordinate of drawn pixel (I instead do a different trick for that), I can continue for so long. In my experience, if you turn on in some games dx9 to dx10, you notice minimal graphic advance with enormous performance drop. (examples are Stalker for example)
And finally, a rendering engine is just more attractive if it can run its demos on dx9/ogl2.0 and have them eye candy.
In the end, I was expecting that in dx11 one will be able to define rasterization rules (not at all), have in pixel function read pixel properties against them (not at all), instead dx11 added a fancy AAA antialiasing (what would be amazingly doable if upper given was implemented). You cannot use gpu for wider computation. For me dx10/dx11 was big dissapointment as to what I had been hoping for
Although I also found D3D10/11 to be disappointing in some areas, I'm actually beginning to like certain things better than D3D9. As much as I don't like the API design (most likely because I don't understand the design choices), it's in "the now", and that's what I need to be targeting. I've been targeting my rendering engine to tailor to D3D and core OpenGL to minimize performance loss. I can choose between any supported API just by setting a single flag.
The last thing I want to do is hold my engine back with legacy stuff, because that's just more maintenance than I believe it's worth. That's especially true if the target demographic has a machine that can handle a more modern API.
http://store.steampowered.com/hwsurvey
This can also be used to help gauge your market/target audience.
I saw this, but if there's one thing I'm certain of is that Steam doesn't accurately represent the PC/Mac gaming scene as a whole. Casual gamers (i.e. Angry Birds, Flappy Bird, Plants vs. Zombies, etc) are less likely to have top of the line hardware to use. Heck, there are people with 5+ year old laptops running some crappy Intel GPU. Worst case scenario, there are some people who don't have their own computers, but will use publicly available ones (which often are bought used, and use low end hardware to begin with). My latest title (which isn't using the engine I've written because this game pre-dates it by over a year) intentionally uses OpenGL 2.0 because it's a casual game that has a wide target market/demographic.
This is good information though. I'd like to release my game on Steam, but that's just one of many channels of distribution.
You will be cutting off a ***LOT*** of folks if you just concentrate on "current generation".
Believe it or not, only the more 'wealthy' folks upgrade their PCs every year.
Heck - there are still lower end PCs being sold today that only support the earlier generation graphics standards .
If you are making a 2D ( or simplistic 3D ) game, don't be an ### ( like a couple game companies I have seen ), and require OpenGL4 / Directx 11 .
I dunno about this. As Frob stated, consider who you're targeting. For a casual game, probably. But for a more extravagant title, I think supporting legacy hardware will only hold the game back (and if the person buying a computer wants to play extravagant titles, they should know better).
But considering that D3D11 allows you to run on D3D9 level hardware, there isn't much loss there (unless you're targeting WinXP). If D3D11 level hardware for a visually lower scale game is required, that's ridiculous.
Lastly, I personally wouldn't consider D3D10 or OpenGL 3 hardware current generation either.
Right now, my engine only supports Direct3D10/OpenGL 3.x level hardware and above.If you like macs (and I know you do), go 3.2+, otherwise I'd leave it at 3.3+.
With 3.3 in theory is supported by all D3D10 level hardware (cept for Intel on Windows because reasons) and it has a few nice things (samplers, explicit attribute location, etc), and you pretty much guarantee that if a card can run OGL 3.3 its either new hardware or old hardware with new drivers (new drivers == good thing, specially if doing OGL).
With 3.2 you give up a few things, but you gain older OSX support.
By using OGL 2.x you reintroduce lots of legacy crap into your render code, I don't think its worth the effort. You'd be basically trying to support either people that don't upgrade their drivers, but you're using OGL so you can't support those anyway, or people with Ge Force 7xxx and ATI Radeon X1xxx cards, which I don't think they're enough around to justify it.
Seriously, D3D10 level hardware was released 8 years ago. Let D3D9 go man, if you truly love it, let it go.
EDIT, have a look at this chart , as you can see (R600 is the code name for ATi HD 2xxx series, G8x is for nVidia GeForce 8xxx series), everything (that matters) supports OGL 3.3 except for Sandy Bridge (aka, Intel HD2xxx and HD3xxx), and thats on Windows, Intel HD3xxx on Linux does supports OGL 3.3.
My engine is capable of determining the highest possible core OpenGL context version. It will automatically choose the best profile for the version selected.
Well, there has to be a cut off point somewhere. Example, devs could only support 3Dfx for so long after it went belly up. I'm not worried about those who are still zealously hanging on to their Hercules Kyro II.
Another thing, I don't (and never have planned to) literally support D3D9. I can't afford to have my engine held back by legacy APIs. Like UE, any serious engine has to evolve with the times. If I could, I'd leave OpenGL ES 2.0 in the dust, but unfortunately, ES 3.0 devices haven't taken over as the predominate like ES 2.0 devices have. I don't believe for a moment that there's any engines that support OpenGL ES 1.1 either (at least, no serious ones).
Just use GLEW so there's no difference between 2 and 3. What features do you want anyway? Deferred rendering?
Already using that. As for features, I want every and any advanced feature I can support.
Shogun.