|| ( defined(__CYGWIN__) && defined(X_DISPLAY_MISSING) )
# define TARGET_HOST_MS_WINDOWS 1
-#elif defined (ANDROID)
+#elif defined (__ANDROID__)
# define TARGET_HOST_ANDROID 1
#elif defined(__posix__) || defined(__unix__) || defined(__linux__) || defined(__sun)
typedef unsigned long fg_time_t;
#endif
-
+#ifndef __fg_unused
+# ifdef __GNUC__
+# define __fg_unused __attribute__((unused))
+# else
+# define __fg_unused
+# endif
+#endif
/* Platform-specific includes */
#if TARGET_HOST_POSIX_X11
/* Freeglut callbacks type definitions */
typedef void (* FGCBDisplay )( void );
typedef void (* FGCBReshape )( int, int );
+typedef void (* FGCBPosition )( int, int );
typedef void (* FGCBVisibility )( int );
typedef void (* FGCBKeyboard )( unsigned char, int, int );
+typedef void (* FGCBKeyboardUp )( unsigned char, int, int );
typedef void (* FGCBSpecial )( int, int, int );
+typedef void (* FGCBSpecialUp )( int, int, int );
typedef void (* FGCBMouse )( int, int, int, int );
typedef void (* FGCBMouseWheel )( int, int, int, int );
typedef void (* FGCBMotion )( int, int );
typedef void (* FGCBPassive )( int, int );
typedef void (* FGCBEntry )( int );
typedef void (* FGCBWindowStatus )( int );
-typedef void (* FGCBSelect )( int, int, int );
typedef void (* FGCBJoystick )( unsigned int, int, int, int );
-typedef void (* FGCBKeyboardUp )( unsigned char, int, int );
-typedef void (* FGCBSpecialUp )( int, int, int );
typedef void (* FGCBOverlayDisplay)( void );
typedef void (* FGCBSpaceMotion )( int, int, int );
typedef void (* FGCBSpaceRotation )( int, int, int );
typedef void (* FGCBButtonBox )( int, int );
typedef void (* FGCBTabletMotion )( int, int );
typedef void (* FGCBTabletButton )( int, int, int, int );
-typedef void (* FGCBDestroy )( void );
+typedef void (* FGCBDestroy )( void ); /* Used for both window and menu destroy callbacks */
typedef void (* FGCBMultiEntry )( int, int );
typedef void (* FGCBMultiButton )( int, int, int, int, int );
typedef void (* FGCBMultiMotion )( int, int, int );
typedef void (* FGCBMultiPassive )( int, int, int );
+typedef void (* FGCBInitContext)();
+typedef void (* FGCBPause)();
+typedef void (* FGCBResume)();
+
/* The global callbacks type definitions */
typedef void (* FGCBIdle )( void );
typedef void (* FGCBTimer )( int );
fgExecutionState ExecState; /* Used for GLUT termination */
char *ProgramName; /* Name of the invoking program */
GLboolean JoysticksInitialised; /* Only initialize if application calls for them */
- int NumActiveJoysticks; /* Number of active joysticks -- if zero, don't poll joysticks */
+ int NumActiveJoysticks; /* Number of active joysticks (callback defined and positive pollrate) -- if zero, don't poll joysticks */
GLboolean InputDevsInitialised; /* Only initialize if application calls for them */
int MouseWheelTicks; /* Number of ticks the mouse wheel has turned */
int MinorVersion; /* Minor OpenGL context version */
int ContextFlags; /* OpenGL context flags */
int ContextProfile; /* OpenGL context profile */
+ int HasOpenGL20; /* fgInitGL2 could find all OpenGL 2.0 functions */
FGError ErrorFunc; /* User defined error handler */
FGWarning WarningFunc; /* User defined warning handler */
};
SFG_PlatformContext pContext; /* The window's FBConfig (X11) or device context (Windows) */
int DoubleBuffered; /* Treat the window as double-buffered */
+ GLint attribute_v_coord;
+ GLint attribute_v_normal;
};
int Width; /* Window's width in pixels */
int Height; /* The same about the height */
- SFG_PlatformWindowState pWState; /* Window width/height (X11) or rectangle/style (Windows) from before a resize */
+ SFG_PlatformWindowState pWState; /* Window width/height (X11) or rectangle/style (Windows) from before a resize, and other stuff only needed on specific platforms */
GLboolean Redisplay; /* Do we have to redisplay? */
GLboolean Visible; /* Is the window visible now */
GLboolean NeedToResize; /* Do we need to resize the window? */
GLboolean IsFullscreen; /* is the window fullscreen? */
+
+ GLboolean NeedToInitContext; /* are OpenGL context/resources loaded? */
+
+ GLboolean VisualizeNormals; /* When drawing objects, draw vectors representing the normals as well? */
};
do \
{ \
if( FETCH_WCB( window, cbname ) != (SFG_Proc)(func) ) \
- (((window).CallBacks[CB_ ## cbname]) = (SFG_Proc)(func)); \
+ (((window).CallBacks[WCB_ ## cbname]) = (SFG_Proc)(func)); \
} while( 0 )
/*
* type.
*/
#define FETCH_WCB(window,cbname) \
- ((window).CallBacks[CB_ ## cbname])
+ ((window).CallBacks[WCB_ ## cbname])
/*
* INVOKE_WCB() is used as:
* side with the old callback code. The old callback code used
* the bare callback's name as a structure member, so I used a
* prefix for the array index name.)
- *
- * XXX For consistancy, perhaps the prefix should match the
- * XXX FETCH* and INVOKE* macro suffices. I.e., WCB_, rather than
- * XXX CB_.
*/
enum
{
- CB_Display,
- CB_Reshape,
- CB_Keyboard,
- CB_KeyboardUp,
- CB_Special,
- CB_SpecialUp,
- CB_Mouse,
- CB_MouseWheel,
- CB_Motion,
- CB_Passive,
- CB_Entry,
- CB_Visibility,
- CB_WindowStatus,
- CB_Joystick,
- CB_Destroy,
-
- /* MPX-related */
- CB_MultiEntry,
- CB_MultiButton,
- CB_MultiMotion,
- CB_MultiPassive,
+ WCB_Display,
+ WCB_Reshape,
+ WCB_Position,
+ WCB_Keyboard,
+ WCB_KeyboardUp,
+ WCB_Special,
+ WCB_SpecialUp,
+ WCB_Mouse,
+ WCB_MouseWheel,
+ WCB_Motion,
+ WCB_Passive,
+ WCB_Entry,
+ WCB_Visibility,
+ WCB_WindowStatus,
+ WCB_Joystick,
+ WCB_Destroy,
+
+ /* Multi-Pointer X and touch related */
+ WCB_MultiEntry,
+ WCB_MultiButton,
+ WCB_MultiMotion,
+ WCB_MultiPassive,
+
+ /* Mobile platforms LifeCycle */
+ WCB_InitContext,
+ WCB_Pause,
+ WCB_Resume,
/* Presently ignored */
- CB_Select,
- CB_OverlayDisplay,
- CB_SpaceMotion, /* presently implemented only on UNIX/X11 */
- CB_SpaceRotation, /* presently implemented only on UNIX/X11 */
- CB_SpaceButton, /* presently implemented only on UNIX/X11 */
- CB_Dials,
- CB_ButtonBox,
- CB_TabletMotion,
- CB_TabletButton,
+ WCB_Select,
+ WCB_OverlayDisplay,
+ WCB_SpaceMotion, /* presently implemented only on UNIX/X11 */
+ WCB_SpaceRotation, /* presently implemented only on UNIX/X11 */
+ WCB_SpaceButton, /* presently implemented only on UNIX/X11 */
+ WCB_Dials,
+ WCB_ButtonBox,
+ WCB_TabletMotion,
+ WCB_TabletButton,
/* Always make this the LAST one */
TOTAL_CALLBACKS
SFG_Window* GameModeWindow; /* The game mode window */
- int WindowID; /* The new current window ID */
- int MenuID; /* The new current menu ID */
+ int WindowID; /* The window ID for the next window to be created */
+ int MenuID; /* The menu ID for the next menu to be created */
};
/*
GLboolean found; /* Used to terminate search */
void* data; /* Custom data pointer */
};
-typedef void (* FGCBenumerator )( SFG_Window *, SFG_Enumerator * );
+typedef void (* FGCBWindowEnumerator )( SFG_Window *, SFG_Enumerator * );
+typedef void (* FGCBMenuEnumerator )( SFG_Menu *, SFG_Enumerator * );
/* The bitmap font structure */
typedef struct tagSFG_Font SFG_Font;
* and userData is the a custom user-supplied pointer. Functions
* are defined and exported from freeglut_structure.c file.
*/
-void fgEnumWindows( FGCBenumerator enumCallback, SFG_Enumerator* enumerator );
-void fgEnumSubWindows( SFG_Window* window, FGCBenumerator enumCallback,
+void fgEnumWindows( FGCBWindowEnumerator enumCallback, SFG_Enumerator* enumerator );
+void fgEnumSubWindows( SFG_Window* window, FGCBWindowEnumerator enumCallback,
SFG_Enumerator* enumerator );
/*
SFG_Menu* fgMenuByID( int menuID );
/*
+ * Returns active menu, if any. Assumption: only one menu active throughout application at any one time.
+ * This is easier than fgWindowByXXX as all menus are placed in one doubly linked list...
+ */
+SFG_Menu* fgGetActiveMenu( );
+
+/*
* The menu activation and deactivation the code. This is the meat
* of the menu user interface handling code...
*/