/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
/*
* Queries the GL context about some attributes
*/
}
}
+#if TARGET_HOST_MS_WINDOWS
+/* WRONG-- FIXME */
+/* The following include file is available from SGI but is not standard:
+ * #include <GL/wglext.h>
+ * So we copy the necessary parts out of it to support the multisampling query
+ */
+#define WGL_SAMPLES_ARB 0x2042
+#endif
+
+
/*
* General settings query method
*/
int FGAPIENTRY glutGet( GLenum eWhat )
{
-#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
+#if TARGET_HOST_MS_WINDOWS
int returnValue ;
GLboolean boolValue ;
#endif
+ int nsamples = 0;
+
switch (eWhat)
{
case GLUT_INIT_STATE:
case GLUT_INIT_WINDOW_HEIGHT: return fgState.Size.Y ;
case GLUT_INIT_DISPLAY_MODE: return fgState.DisplayMode ;
+#if TARGET_HOST_POSIX_X11
/*
* The window/context specific queries are handled mostly by
* fghGetConfig().
*/
case GLUT_WINDOW_NUM_SAMPLES:
- /* XXX Multisampling. Return what I know about multisampling. */
- return 0;
+#ifdef GLX_VERSION_1_3
+ glGetIntegerv(GL_SAMPLES, &nsamples);
+#endif
+ return nsamples;
-#if TARGET_HOST_UNIX_X11
/*
* The rest of GLX queries under X are general enough to use a macro to
* check them
/* I do not know yet if there will be a fgChooseVisual() function for Win32 */
case GLUT_DISPLAY_MODE_POSSIBLE:
- return( fgChooseVisual() == NULL ? 0 : 1 );
+ {
+ XVisualInfo* visualInfo = fgChooseVisual();
+ if ( visualInfo == NULL ) {
+ return 0;
+ } else {
+ XFree( visualInfo );
+ return 1;
+ }
+ }
/* This is system-dependant */
case GLUT_WINDOW_FORMAT_ID:
return fgStructure.CurrentWindow->Window.VisualInfo->visualid;
-#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
+#elif TARGET_HOST_MS_WINDOWS
+
+ case GLUT_WINDOW_NUM_SAMPLES:
+ glGetIntegerv(WGL_SAMPLES_ARB, &nsamples);
+ return nsamples;
/* Handle the OpenGL inquiries */
case GLUT_WINDOW_RGBA:
/* ...then we've got to correct the results we've just received... */
-#if !TARGET_HOST_WINCE
- if ( ( fgStructure.GameMode != fgStructure.CurrentWindow ) && ( fgStructure.CurrentWindow->Parent == NULL ) &&
+#if !defined(_WIN32_WCE)
+ if ( ( fgStructure.GameModeWindow != fgStructure.CurrentWindow ) && ( fgStructure.CurrentWindow->Parent == NULL ) &&
( ! fgStructure.CurrentWindow->IsMenu ) )
{
winRect.left += GetSystemMetrics( SM_CXSIZEFRAME );
winRect.top += GetSystemMetrics( SM_CYSIZEFRAME ) + GetSystemMetrics( SM_CYCAPTION );
winRect.bottom -= GetSystemMetrics( SM_CYSIZEFRAME );
}
-#endif /* !TARGET_HOST_WINCE */
+#endif /* !defined(_WIN32_WCE) */
switch( eWhat )
{
break;
case GLUT_WINDOW_BORDER_WIDTH :
-#if TARGET_HOST_WINCE
+#if defined(_WIN32_WCE)
return 0;
#else
return GetSystemMetrics( SM_CXSIZEFRAME );
-#endif /* !TARGET_HOST_WINCE */
+#endif /* !defined(_WIN32_WCE) */
case GLUT_WINDOW_HEADER_HEIGHT :
-#if TARGET_HOST_WINCE
+#if defined(_WIN32_WCE)
return 0;
#else
return GetSystemMetrics( SM_CYCAPTION );
-#endif /* TARGET_HOST_WINCE */
+#endif /* defined(_WIN32_WCE) */
case GLUT_DISPLAY_MODE_POSSIBLE:
-#if TARGET_HOST_WINCE
+#if defined(_WIN32_WCE)
return GL_FALSE;
#else
return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,
PFD_MAIN_PLANE );
-#endif /* TARGET_HOST_WINCE */
+#endif /* defined(_WIN32_WCE) */
case GLUT_WINDOW_FORMAT_ID:
-#if !TARGET_HOST_WINCE
+#if !defined(_WIN32_WCE)
if( fgStructure.CurrentWindow != NULL )
return GetPixelFormat( fgStructure.CurrentWindow->Window.Device );
-#endif /* TARGET_HOST_WINCE */
+#endif /* defined(_WIN32_WCE) */
return 0;
#endif
*/
return TRUE ;
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
case GLUT_HAS_MOUSE:
return TRUE ;
*/
return 3 ;
-#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
+#elif TARGET_HOST_MS_WINDOWS
case GLUT_HAS_MOUSE:
/*
case GLUT_NUM_MOUSE_BUTTONS:
/* We are much more fortunate under Win32 about this... */
-#if TARGET_HOST_WINCE
+#if defined(_WIN32_WCE)
return 1;
#else
return GetSystemMetrics( SM_CMOUSEBUTTONS );
-#endif /* TARGET_HOST_WINCE */
+#endif /* defined(_WIN32_WCE) */
#endif
case GLUT_JOYSTICK_AXES:
return glutJoystickGetNumAxes ( 0 );
- case GLUT_HAS_SPACEBALL:
case GLUT_HAS_DIAL_AND_BUTTON_BOX:
+ return fgInputDeviceDetect ();
+
+ case GLUT_NUM_DIALS:
+ if ( fgState.InputDevsInitialised ) return 8;
+ return 0;
+
+ case GLUT_NUM_BUTTON_BOX_BUTTONS:
+ return 0;
+
+ case GLUT_HAS_SPACEBALL:
case GLUT_HAS_TABLET:
return FALSE;
case GLUT_NUM_SPACEBALL_BUTTONS:
- case GLUT_NUM_BUTTON_BOX_BUTTONS:
- case GLUT_NUM_DIALS:
case GLUT_NUM_TABLET_BUTTONS:
return 0;
int FGAPIENTRY glutGetModifiers( void )
{
FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetModifiers" );
- if( fgState.Modifiers == 0xffffffff )
+ if( fgState.Modifiers == INVALID_MODIFIERS )
{
fgWarning( "glutGetModifiers() called outside an input callback" );
return 0;
switch( eWhat )
{
-#if TARGET_HOST_UNIX_X11
+#if TARGET_HOST_POSIX_X11
case GLUT_OVERLAY_POSSIBLE:
return FALSE;
case GLUT_OVERLAY_DAMAGED:
return -1;
-#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
+#elif TARGET_HOST_MS_WINDOWS
case GLUT_OVERLAY_POSSIBLE:
/* return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,