I'm not going to get much done over the next week or so as there is some Real Life stuff I've been putting off that has now become a priority. Sometimes things suck like that, but all the same it will be good to get it over and out of the way.
Here's where I stand as of today:
This in undergoing a badly needed rewrite. The original code was fine for a straight port, but was quite clumsy to work further with. I'm hoping to be able to bring inline brush models back into the main surface refresh now that I have the problem of software transforms resolved.
Water warp updates
The entire render to texture framework has been stripped out and replaced with a pixel shader update. This maintains full speed at no extra video RAM cost, and is the right thing to do, even though it locks out those who don't have PS 2.0 capable hardware.
I'm not happy with how the poles of the sphere render, it looks wrong on open-sky maps, where it's really noticeable, but it's likely to stay that way for a while yet.
Still only supported on world and (some) 2D textures. Luma support is done but requires a rewrite of the other renders to enable it. I've come full circle and actually prefer the original ID1 textures these days, but people like external textures so I want to get this as complete as possible.
Alias and Instanced bmodels
These have pretty much moved over to a full shader-based render, which is far more efficient for handling transforms and vertex modifications. Instanced models are now lit properly, but seem too dark.
Reverted the original dot texture (the "fuzzy point" in the last release looked wrong), otherwise nothing done. I'm not in a hurry to write a full-on replacement.
Shaders in general
There are places where using shaders is the most efficient solution, but I'm not going down the whole bumpy/specular/per-pixel route. It might look nice, but it doesn't look like Quake.
Loading them is working fine, but they need to be integrated with the main renders. A lot (all?) of external texture packs provide lumas meant for use as an additive blend, which is incorrect. The correct blend is (lightmap + luma) * texture, and this is what I will be doing. To work around this I hack the texture data at load time to increase the intensity. It simplifies the render path which is what's important.
I've completely removed r_shadows 1 mode but the cvar is still there. This needs serious work but I don't consider it high priority.
I'm currently benchmarking at about 98 FPS on demo1 on the Intel 910; which I'm going to be continuing to use as my primary benchmark. This includes pixel shaders/etc and is up from 65 FPS in the previous release (getting rid of render to texture helped a lot there. Oddly enough, WinQuake is faster on this machine, which I suppose is as good an indication of the quality of the chipset as anything.
Quite a few new ones; the polyblend will switch itself off if you fire a weapon underwater, and the tileclear around the status bar sometimes doesn't draw are the most immediately noticeable.
I've completely ripped out the old cache and zone systems; I had the hunk removed too but I reverted it while chasing down an alias model vertex bug (that in the end was caused by something completely different - oh well). I'll probably simplify this even more with the eventual intention of going to a full dynamic allocation with no heapsize restrictions.
A lot (nearly all?) of the hard limits have been removed from the client, aside from those which are protocol dependent (and one or two others where the usage is so limited it doesn't seem to make sense to invest the effort). This has been very satisfying to do. The sv.edicts array is still being allocated at full 8192 capacity which puts some overhead on memory requirements; I had solved this in the GL engine so I'll probably spring-clean and port the code.
Overall quite a lot to do still, so a new release will be a way off yet.