void glutSetOption( GLenum eWhat , int value );
This is great, but what if you want to change things temporarily and you don't know what the original settings are? This could happen, for example, if you're writing a library function that sits between GLUT and the rest of your application.
What you need is a reading analogue to glutSetOption, something like a glutGetOption. Unfortunately, there is no glutGetOption.
Fortunately, there is a gluttonGetOption in the extended GLUT-like library I'm working on, glutton.
To make this function, I first added the declaration in freeglut_ext.h (glutton is based upon the marvelous freeglut library):
int FGAPIENTRY gluttonGetOption( GLenum eWhat );
Then, in freeglut_state.c, I copied the glutSetOption implementation and reversed the data flow:
int FGAPIENTRY gluttonGetOption( GLenum eWhat )
{
FREEGLUT_EXIT_IF_NOT_INITIALISED ( "gluttonGetOption" );
switch( eWhat )
{
case GLUT_INIT_WINDOW_X:
return fgState.Position.X;
break;
case GLUT_INIT_WINDOW_Y:
return fgState.Position.Y;
break;
case GLUT_INIT_WINDOW_WIDTH:
return fgState.Size.X;
break;
case GLUT_INIT_WINDOW_HEIGHT:
return fgState.Size.Y;
break;
case GLUT_INIT_DISPLAY_MODE:
return (int)fgState.DisplayMode;
break;
case GLUT_ACTION_ON_WINDOW_CLOSE:
return fgState.ActionOnWindowClose;
break;
case GLUT_RENDERING_CONTEXT:
return fgState.UseCurrentContext;
break;
case GLUT_DIRECT_RENDERING:
return fgState.DirectContext;
break;
case GLUT_WINDOW_CURSOR:
return fgStructure.CurrentWindow->State.Cursor;
break;
case GLUT_AUX:
return fgState.AuxiliaryBufferNumber;
break;
case GLUT_MULTISAMPLE:
return fgState.SampleNumber;
break;
default:
fgWarning( "glutGetOption(): missing enum handle %d", eWhat );
return 0xDeadBeef;
break;
}
}
It doesn't get much easier than that.