Tuesday, August 31, 2010

Current Status Update

I haven't updated much recently because once again there hasn't been much to provide updates about. Progress on the RMQ engine is coming along nicely, together with the (expected) frustrations of differences between OpenGL and D3D, as well as problems with migrating an already established codebase to something new. I've ranted often enough about these things in the past (and no doubt will again in the future) so there's no need to go into further details right now.

Every day things are getting a little closer to where I want them to be, and as an overall package it's starting to hang together well now. Of course the initial rewrite of the renderer went very fast, but the current phase of bringing on all the little weird extra things that are needed is dreadfully slow. This is always the case with a radical rewrite of anything, so nothing dreadful about that.

Generally when I do any kind of rewrite like this I also use a Quake II engine as an experimental platform, and this is no different. The resulting Quake II build is normally not fit for release - that only happened once - so don't be expecting to see anything there. Of course it's also OpenGL this time, and with the whole point of the "DirectQ" exercise being to provide D3D as an alternative there doesn't seem to be any reason to release this one. If you want a Quake II engine there are plenty of other options.

Roundabout now I'm reasonably fed up with the renderer code and itching to work on something different in it, so thankfully things are coming near the end with that. Expect more regular updates when I start on that.

Regarding DirectQ itself, I have a Release 1.8.666b almost ready to roll. This fixes a few more outstanding bugs, but there is one other that I want to take the time to have a closer look at before I put it out.

The future of DirectQ is looking like D3D11. I know I did an April Fool post about it earlier on this year, but further thought (and time away from it) is starting to steer me in that direction.

There are a number of reasons for this.

Firstly I feel as though I've taken the current D3D9 implementation as far as I really want to go with it. Any future evolutions will be just that - evolutions. There's not much moving forward in that and I want to move forward.

Secondly, there are a number of bugs and Bad Things behind the scenes in DirectQ that I've pasted over in the current codebase, but that really need a gutting and rewriting for to fix properly. D3D11 just handles the specific areas that these cause problems in a lot better.

Thirdly D3D9 itself is an old, old API, and it shows. Of course it's still viable, but there has been a lot of progress since then and it seems right to take advantage of that.

Fourthly, there is a lot of cruddy old code that I've retained in DirectQ for compatibility with more downlevel hardware, and that is preventing me from moving some things forward the way I want to; by moving up to D3D11 where a certain minimum hardware requirement exists (this can be the D3D9-level requirement) I can have a cleaner, more stable and more bug-free codebase.

Fifthly, preliminary tests of D3D11 (using some SDK samples - which admittedly may be biased) indicate that it runs at about twice the speed of D3D9.

Now, all of this means that some day DirectQ is going to be a Vista/Windows 7 only app (D3D11 itself can run on downlevel hardware, but still needs to more recent OS). I believe that my D3D8 porting project engines are a suitable replacement for it on XP and below, and that they will still have a reason to exist as a result of this. In that sense DirectQ will become the "Rolls Royce" engine that I do to please myself, and one of the others will be the general workhorse instead.

Interesting times ahead there.

4 comments:

gnounc said...

Sounds like a bit of a shift in perspective. But a welcome one.

The current release of DirectQ can fill the need for an engine on lower end hardware, I look forward to the progress allowed by DX11.

Being a user actually ON lower end hardware I think its necessary to reiterate that you have my full support in raising the hardware requirements.

mhquake said...

"Being a user actually ON lower end hardware I think its necessary to reiterate that you have my full support in raising the hardware requirements."

That's good to hear; I think however that D3D11 will actually run well on a wide range of lower end hardware (wider than you might expect) so we're not really looking at excluding too many people from the party.

Nyarlathotep said...

Go for it. Whether anyone likes it or not, Win7 and Vista are The Wave of the Future.

Great as it would be to see MHexen2, is there any chance you'd ever take on MHQuake3?

mhquake said...

Oh, I have a Q3A build with some very small modifications made, but - for me - there's more malleable raw material to work with in Q1. Even Q2 is limited in terms of the things I enjoy working on - there's nothing much wrong with the engine; it just needs it's multitextured renderer and a handful of other things cleaned up a little to be more efficient on modern hardware.

Having said that, I'd love to do a D3D port of Q3A just for the fun and experience, although my memory of the initial ports of Quake and Quake II is that getting the basic renderer up and running is a very fast job; 2 or 3 days work is all that's needed (less for Q3A since it already uses vertex arrays), but putting the final polish on it and straightening up all of the awkward little bugs that fall out is a long, gruelling and unenjoyable process.

This isn't a D3D thing - ID had the very same experience with the GLQuake.