Saturday, November 21, 2009

Update on new release

It's been a while since I've updated, so here's a dump on where we're currently at.

I had intended to be releasing roundabout now, but there is still some outstanding testing work. It's relatively minor stuff, and it's really just a matter of getting round to it.

(Going into rant mode now...)

One feature that almost made it in but that I ended up backing away from is the use of D3D9Ex for the renderer. This is an extended version of Direct3D 9 that is only available on a Vista or 7 machine, and even then only if you have hardware that's capable of running the Aero desktop. The intention was to support both regular D3D9 and D3D9Ex, running a test for availability at startup and deciding which to use then.

The neat thing is that the interfaces are almost 100% compatible, such that DirectQ could be ported to 9Ex in about 5 minutes. There are also a lot of really NICE benefits, such as elimination of device loss, extra functionality, sharing of resources across devices, and so on. Unfortunately getting both to co-exist peacefully in a single code-base is a little more involved, and since D3D9Ex is not, and apparently never will be, available on earlier OSs (or on Vista/7 machines that don't have a WDDM driver) the people who end up suffering are the developers and end-users.

This would not be a sustainable situation for me. I really REALLY wanted to use 9Ex, but the peaceful co-existence issues have for now defeated that impulse. The irritating thing is that all of the extra 9Ex functionality seems as though it could easily have been implemented in a software layer in the runtime. The new Direct3DCreate9Ex and CreateDevice9Ex APIs would have made it a non-breaking change. Microsoft did The Right Thing by implementing a software layer for vertex shaders on hardware that doesn't support them, for example, and I know that their programmers aren't stupid, and could have done it with 9Ex. Evidence: all of the 9Ex features (at least that I've read about so far) are things that otherwise need to be programmed around in the application.

This comes back to a point I made a while back where I suspected that Direct3D 10 was being (mis)used as a Vista marketing tool. And the 9Ex situation seems to support that point.

Oh well, I suppose it could have been worse. At least it's not Unix.

0 comments: