You need to run in 15bpp, or the colours won't render correctly.
Easiest way is to put 'Weight 555' in the 16 bit Depth section in your
XF86Config.  

Texturing is working now.  Unfortunately the ViRGE doesn't have all the 
src/dest blending modes necessary for real OpenGL support.  I'll be doing
some bad hacks, I imagine, to try and get somewhat accurate support.
We'll see.  Bad hack number one is for GL_LUMINANCE textures.  I store
them in 4444 format, with the alpha being the value of the grey.  Otherwise
you see big black squares.  This could be wrong, I'll be pokin around.

We have lightmapping now!  It can be enabled with:
s3virge_lightmap_hack = 1
in your glx.conf.  

Basically, I setup another back buffer in video memory, and render lightmaps
to that.  Anything with GL_MODULATE is rendered into the regular backbuffer
normally and to the lightmap buffer as white triangles.  Anything with
GL_REPLACE and Z-buffering enabled is rendered somewhat similarly.  The
ViRGE has a 'complex reflection' texture blending mode for lighting
triangles wherein the two values are added together with a max of 1.  I
light the triangle in all white with a 0 alpha, and then blend the texture
on, so the lightmap buffer gets white bits for the numbers and such, but
just the numbers and not the square around them.  On swap, I read the back
buffer and the lightmap buffer from video memory (slow -- the fastest way
I've found is one big freaking memcpy, DMA might speed this up), blend the
two 'by hand' (Since the values are 5-bit, a lookup table for the multiplies
is only 1024 in size (4096 since I use 32-bit ints now, I think it's quicker
that way).. and write it out to the back buffer, and then blit.  The speed
hit isn't too bad on my machine, but we'll see how it is on a faster machine
where that read time might be more of a % of the time in a frame.


