How I can change between Hardware and Software Rendering?
I think one way is to call your functions instead of calling directly GL functions.
For example
void myGlBlendFunc(GLEnum e1, GLEnum e2)
{
if(software)
myOwnBlendFunc(e1,e2)
else
glBlendFunc(e1,e2)
}
or better assigning pointers to functions, so you can switch between OGL,DirectX,Software or wathever you want.