Wednesday, February 16, 2011

DirectQ Update - 15th February 2011

Quick one this time; just been doing some Intel bugfixing and testing. The Intel 965 seems to interpret D3DSHADE_GOURAUD and D3DSHADE_FLAT in a very odd manner indeed when combined with shaders. Fortunately I've just been able to get rid of them entirely from the engine.

More speed too, and with more optimizations to come. Particles and sprites are the last remaining items to get another working over, and there's something else with MDLs I want to try.

Then I think I'm into a final round of testing and might release the early beta. It won't happen till next week though, and that means towards the end of next week, not Monday.

The RMQ folks have the software Quake MDL lighting code now so it'll be interesting to get feedback from them on it.

______________


Update: the experimental "something I wanted to try with MDLs" didn't work out too good. In theory it could have avoided even more vertex buffer updates by splitting lastverts and currverts into two buffers, but it ended up being slower (owing to two buffer locks per mdl, plus two walks through the in-memory copy of the verts to update the buffers) and it broke muzzleflashes. Nice idea though, and sometimes you do just have to try these things out.

3 comments:

Nyarlathotep said...

Define "very odd." Is it a driver glitch?

mhquake said...

> Define "very odd." Is it a driver glitch?

Odd as in it applies the render state to texture coordinates instead of (or as well as) to colours. It only affects the UI elements and particles (and presumably sprites too, but I didn't check) as these are the only things left that take a colour as input (MDLs are now very different), only happens on a hardware VP device, and only with shaders.

As soon as you switch back to flat shading these go as if all 4 texcoords were {0,0}.

I presume that it's a driver glitch as I can't see any obvious code bugs, and the circumstances that trigger it are very limited and specific.

Nyarlathotep said...

I'm glad you worked around it efficiently, in any case. What was with VQuake's method of rendering that seemed so distinctive?