My problem is that I want to try out converting the colors to unsigned
bytes instead of floats. When I was using vertex arrays instead of VBOs,
using unsigned bytes gave me something like 25% better framerates on my
hardware (2004 era laptop with ATI), purely from increased rendering speeds.
Does it sound likely that I'll see this sort of improvement on other
hardware too? Or should I just stick with using colors as floats throughout?
Because vertex arrays transfer data across the (fairly slow) graphics bus each frame, I suspect most, if not all of this performance gain is due to passing across ~1/4 of the bits for color.
As far as I know, the GPU will convert everything to floating point before rendering (with the only exception being (possibly?) textures). For example, glTranslated(...) is no more accurate than glTranslatef(...), because the matrix stack is ultimately in floating point (and the values of the transformation matrix are truncated before being multiplied in hardware). I'm fairly sure that when drawing, the rasterizer converts everything to floating point, including color.
I.e., don't bother. the speed increase you're getting is due to less data transfer to the GPU. With vertex buffer objects, this data transfer nominally happens exactly once (from your usage, GL_STATIC_DRAW, yes, exactly once). If you somehow made an interleaved VBO with different data types, it sounds like you'd gain perhaps a fraction of a second of loading time (not counting the extra computation to make it client-side first), but nothing more.