Thursday, December 17, 2009

DirectFitz Update

Following the release of 1.7.666c I've been doing some work on DirectFitz; just finishing off the OpenGL support. I've decided to not do a complete implementation of everything in FitzQuake (that means render-to-framebuffer waterwarp, mostly) as it would delay a release and is not really necessary for regular gameplay.

I do however want to implement glPolygonOffset, as other engines use it for other features. That's about all that's left to do (there's also GL_QUAD_STRIP), and it's just really a matter of mapping the OpenGL calls to the D3D ones. D3D8 has a somewhat simpler implementation of polygon offset than OpenGL (it's better in 9) and there doesn't seem at present to be a one-to-one direct mapping, so it's over to research, experimentation, and finding out which parts of the documentation are telling the truth and which parts are lying (and which parts are missing...!)

Hoping for a release in not too much time (days rather than weeks).

DirectRook will take a bit more work, there are some 9 calls that need to be implemented. I think I might skip display lists; they're not really that big a deal and we can just call the function that generates the list directly instead. In the vast majority of cases these days display lists give zero performance improvement; they were really only useful back in the early/mid 90s.

There are however a few interesting things there like 1D textures and glCopyTexImage2D, which will need a bit of work. Hopefully I'll still make the target of a release before 2010, but I'm not going to punish myself too much to get there; if it happens it's great, if it doesn't, well it'll just have to happen in early 2010.

3 comments:

Andy said...

Good God, I can't even keep up anymore! You're making releases and working on DirectThis and DirectThat like 1996 is going out of style! :)

DrLabman said...

I believe display lists decreased performance on some cards because of poor implementations.

mhquake said...

Part of it is that an OpenGL implementation is not actually required to support anything in hardware, just required to support it. So one theoretical display list implementation would be to just store all commands and data in a great big buffer in system memory, then play through the buffer when called.