Me again (2nd post in a row)
I dived a bit in your code, about 8 bits textures that does not work. The thing is that you use
glBlendFunc(GL_ONE, GL_ONE) blending, so every incoming fragment is added to the color buffer, whatever the incoming alpha is. Some sort of non-blending blending
In your case, it seems more suitable to use
glBlendFunc(GL_SRC_ALPHA, GL_ONE), so you can use alpha, to do what he is supposed to do: blending.
I've just tested, with this change, it seems to works OK with 1 byte per pixel textures. A small warning about "lensflare-rays.tga": you'll lost the blue color of this texture when switching to greyscale, so you must give this blue color during rendering, I think.
About rendering context, you'll have to restore default blending (
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)) after rendering. You must also avoid using raydium_osd_color_rgba() since it's a some sort of "user space" function. When you call it internally inside Raydium, the user lost he own OSD color. You should probably use glColor4fv() directly, just after texture preparation. (then remove it from raydium_osd_draw_quad() perhaps ? We should think a bit more about this last function, IMHO.)
Do no hesitate to tell me that this post is not really understandable if it's the case !
edit: there will be some optimizations to do (glBlendFunc can be called once for all, for instance)