X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_internal.h;h=a6a4a76d0fdb7a961b277e331a52633bb7eb44df;hb=f075b2126dff4d88bc2811281f0d27e7c0581ab4;hp=013cae89917a90654ffaf4cf148c033e25289a5c;hpb=d67937396dc33c86017012859b2d9ed010fc6c88;p=freeglut diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index 013cae8..a6a4a76 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -28,14 +28,16 @@ #ifndef FREEGLUT_INTERNAL_H #define FREEGLUT_INTERNAL_H +#if HAVE_CONFIG_H +# include "config.h" +#endif + /* XXX Update these for each release! */ #define VERSION_MAJOR 2 #define VERSION_MINOR 2 #define VERSION_PATCH 0 -/* - * Freeglut is meant to be available under all Unix/X11 and Win32 platforms. - */ +/* Freeglut is meant to be available under all Unix/X11 and Win32 platforms. */ #if defined(_WIN32_WCE) # define TARGET_HOST_UNIX_X11 0 # define TARGET_HOST_WIN32 0 @@ -51,19 +53,8 @@ #endif #define FREEGLUT_MAX_MENUS 3 -#define FREEGLUT_DEBUG 1 - -#if FREEGLUT_DEBUG - #undef G_DISABLE_ASSERT - #undef G_DISABLE_CHECKS -#else - #define G_DISABLE_ASSERT - #define G_DISABLE_CHECKS -#endif -/* - * Somehow all Win32 include headers depend on this one: - */ +/* Somehow all Win32 include headers depend on this one: */ #if TARGET_HOST_WIN32 #include #include @@ -75,25 +66,31 @@ #define strdup _strdup #endif -/* - * Those files should be available on every platform. - */ +/* Those files should be available on every platform. */ #include #include #include #include #include #include -#include -#include -#if TARGET_HOST_UNIX_X11 -#include -#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_UNISTD_H +# include +#endif +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif #endif -/* - * The system-dependant include files should go here: - */ +/* The system-dependant include files should go here: */ #if TARGET_HOST_UNIX_X11 #include #include @@ -105,9 +102,7 @@ #endif #endif -/* - * Microsoft VisualC++ 5.0's does not define the PI - */ +/* Microsoft VisualC++ 5.0's does not define the PI */ #ifndef M_PI # define M_PI 3.14159265358979323846 #endif @@ -122,9 +117,7 @@ /* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */ -/* - * Freeglut callbacks type definitions - */ +/* Freeglut callbacks type definitions */ typedef void (* FGCBDisplay )( void ); typedef void (* FGCBReshape )( int, int ); typedef void (* FGCBVisibility )( int ); @@ -150,23 +143,17 @@ typedef void (* FGCBTabletMotion )( int, int ); typedef void (* FGCBTabletButton )( int, int, int, int ); typedef void (* FGCBDestroy )( void ); -/* - * The global callbacks type definitions - */ +/* The global callbacks type definitions */ typedef void (* FGCBIdle )( void ); typedef void (* FGCBTimer )( int ); typedef void (* FGCBMenuState )( int ); typedef void (* FGCBMenuStatus )( int, int, int ); -/* - * The callback used when creating/using menus - */ +/* The callback used when creating/using menus */ typedef void (* FGCBMenu )( int ); -/* - * A list structure - */ +/* A list structure */ typedef struct tagSFG_List SFG_List; struct tagSFG_List { @@ -174,9 +161,7 @@ struct tagSFG_List void *Last; }; -/* - * A list node structure - */ +/* A list node structure */ typedef struct tagSFG_Node SFG_Node; struct tagSFG_Node { @@ -184,9 +169,7 @@ struct tagSFG_Node void *Prev; }; -/* - * A helper structure holding two ints and a boolean - */ +/* A helper structure holding two ints and a boolean */ typedef struct tagSFG_XYUse SFG_XYUse; struct tagSFG_XYUse { @@ -194,13 +177,11 @@ struct tagSFG_XYUse GLboolean Use; /* ...and a single boolean. */ }; -/* - * A helper structure holding a timeval and a boolean - */ +/* A helper structure holding a timeval and a boolean */ typedef struct tagSFG_Time SFG_Time; struct tagSFG_Time { -#ifdef WIN32 +#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE DWORD Value; #else struct timeval Value; @@ -219,9 +200,7 @@ typedef enum GLUT_EXEC_STATE_STOP } fgExecutionState ; -/* - * This structure holds different freeglut settings - */ +/* This structure holds different freeglut settings */ typedef struct tagSFG_State SFG_State; struct tagSFG_State { @@ -231,8 +210,7 @@ struct tagSFG_State GLboolean Initialised; /* freeglut has been initialised */ - GLboolean ForceDirectContext; /* Force direct rendering? */ - GLboolean TryDirectContext; /* What about giving a try to? */ + int DirectContext; /* Direct rendering state */ GLboolean ForceIconic; /* New top windows are iconified */ GLboolean UseCurrentContext; /* New windows share with current */ @@ -265,11 +243,10 @@ struct tagSFG_State fgExecutionState ExecState; /* Used for GLUT termination */ char *ProgramName; /* Name of the invoking program */ + GLboolean JoysticksInitialised; /* Only initialize if application calls for them */ }; -/* - * The structure used by display initialization in freeglut_init.c - */ +/* The structure used by display initialization in freeglut_init.c */ typedef struct tagSFG_Display SFG_Display; struct tagSFG_Display { @@ -308,9 +285,7 @@ struct tagSFG_Display }; -/* - * The user can create any number of timer hooks - */ +/* The user can create any number of timer hooks */ typedef struct tagSFG_Timer SFG_Timer; struct tagSFG_Timer { @@ -357,9 +332,7 @@ struct tagSFG_Context int DoubleBuffered; /* Treat the window as double-buffered */ }; -/* - * Window's state description. This structure should be kept portable. - */ +/* Window's state description. This structure should be kept portable. */ typedef struct tagSFG_WindowState SFG_WindowState; struct tagSFG_WindowState { @@ -503,9 +476,7 @@ enum }; -/* - * This structure holds the OpenGL rendering context for all the menu windows - */ +/* This structure holds the OpenGL rendering context for all the menu windows */ typedef struct tagSFG_MenuContext SFG_MenuContext; struct tagSFG_MenuContext { @@ -516,9 +487,7 @@ struct tagSFG_MenuContext SFG_WindowContextType Context; /* The menu window's WGL context */ }; -/* - * This structure describes a menu - */ +/* This structure describes a menu */ typedef struct tagSFG_Window SFG_Window; typedef struct tagSFG_MenuEntry SFG_MenuEntry; typedef struct tagSFG_Menu SFG_Menu; @@ -540,9 +509,7 @@ struct tagSFG_Menu SFG_Window *ParentWindow; /* Window in which the menu is defined */ }; -/* - * This is a menu entry - */ +/* This is a menu entry */ struct tagSFG_MenuEntry { SFG_Node Node; @@ -578,9 +545,7 @@ struct tagSFG_Window }; -/* - * A linked list structure of windows - */ +/* A linked list structure of windows */ typedef struct tagSFG_WindowList SFG_WindowList ; struct tagSFG_WindowList { @@ -588,9 +553,7 @@ struct tagSFG_WindowList SFG_Window *window ; }; -/* - * This holds information about all the windows, menus etc. - */ +/* This holds information about all the windows, menus etc. */ typedef struct tagSFG_Structure SFG_Structure; struct tagSFG_Structure { @@ -623,9 +586,7 @@ struct tagSFG_Enumerator }; typedef void (* FGCBenumerator )( SFG_Window *, SFG_Enumerator * ); -/* - * The bitmap font structure - */ +/* The bitmap font structure */ typedef struct tagSFG_Font SFG_Font; struct tagSFG_Font { @@ -637,9 +598,7 @@ struct tagSFG_Font float xorig, yorig; /* Relative origin of the character */ }; -/* - * The stroke font structures - */ +/* The stroke font structures */ typedef struct tagSFG_StrokeVertex SFG_StrokeVertex; struct tagSFG_StrokeVertex @@ -673,19 +632,13 @@ struct tagSFG_StrokeFont /* -- GLOBAL VARIABLES EXPORTS --------------------------------------------- */ -/* - * Freeglut display related stuff (initialized once per session) - */ +/* Freeglut display related stuff (initialized once per session) */ extern SFG_Display fgDisplay; -/* - * Freeglut internal structure - */ +/* Freeglut internal structure */ extern SFG_Structure fgStructure; -/* - * The current freeglut settings - */ +/* The current freeglut settings */ extern SFG_State fgState; @@ -695,7 +648,26 @@ extern SFG_State fgState; * A call to this function makes us sure that the Display and Structure * subsystems have been properly initialized and are ready to be used */ -#define freeglut_assert_ready assert( fgState.Initialised ); +#define FREEGLUT_EXIT_IF_NOT_INITIALISED( string ) \ + if ( ! fgState.Initialised ) \ + { \ + fgError ( " ERROR: Function <%s> called" \ + " without first calling 'glutInit'.", (string) ) ; \ + } + +#define FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED( string ) \ + if ( ! fgState.Initialised ) \ + { \ + fgError ( " ERROR: Internal <%s> function called" \ + " without first calling 'glutInit'.", (string) ) ; \ + } + +#define FREEGLUT_INTERNAL_ERROR_EXIT( cond, string, function ) \ + if ( ! ( cond ) ) \ + { \ + fgError ( " ERROR: Internal error <%s> in function %s", \ + (string), (function) ) ; \ + } /* * Following definitions are somewhat similiar to GLib's, @@ -710,17 +682,19 @@ extern SFG_State fgState; /* * A call to those macros assures us that there is a current - * window and menu set, respectively: + * window set, respectively: */ -#define freeglut_assert_window assert( fgStructure.Window != NULL ); -#define freeglut_assert_menu assert( fgStructure.Menu != NULL ); +#define FREEGLUT_EXIT_IF_NO_WINDOW( string ) \ + if ( ! fgStructure.Window ) \ + { \ + fgError ( " ERROR: Function <%s> called" \ + " with no current window defined.", (string) ) ; \ + } /* - * The initialize and deinitialize functions get called on glutInit() - * and glutMainLoop() end respectively. They should create/clean up + * The deinitialize function gets called on glutMainLoop() end. It should clean up * everything inside of the freeglut */ -void fgInitialize( const char* displayName ); void fgDeinitialize( void ); /* @@ -732,16 +706,12 @@ void fgDeinitialize( void ); void fgCreateStructure( void ); void fgDestroyStructure( void ); -/* - * A helper function to check if a display mode is possible to use - */ +/* A helper function to check if a display mode is possible to use */ #if TARGET_HOST_UNIX_X11 XVisualInfo* fgChooseVisual( void ); #endif -/* - * The window procedure for Win32 events handling - */ +/* The window procedure for Win32 events handling */ #if TARGET_HOST_WIN32 || TARGET_HOST_WINCE LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); @@ -765,21 +735,22 @@ void fgCloseWindow( SFG_Window* window ); void fgAddToWindowDestroyList ( SFG_Window* window ); void fgCloseWindows (); void fgDestroyWindow( SFG_Window* window ); -void fgClearCallBacks( SFG_Window *window ); -/* - * Menu creation and destruction. Defined in freeglut_structure.c - */ +/* Menu creation and destruction. Defined in freeglut_structure.c */ SFG_Menu* fgCreateMenu( FGCBMenu menuCallback ); void fgDestroyMenu( SFG_Menu* menu ); -/* - * Joystick device management functions, defined in freeglut_joystick.c - */ -void fgJoystickInit( int ident ); +/* Joystick device management functions, defined in freeglut_joystick.c */ +int fgJoystickDetect( void ); +void fgInitialiseJoysticks( void ); void fgJoystickClose( void ); void fgJoystickPollWindow( SFG_Window* window ); +/* More joystick functions. Should these go into the API? */ +int glutJoystickGetNumAxes( int ident ); +int glutJoystickGetNumButtons( int ident ); +int glutJoystickNotWorking( int ident ); + /* * Helper function to enumerate through all registered windows * and one to enumerate all of a window's subwindows... @@ -821,8 +792,8 @@ SFG_Menu* fgMenuByID( int menuID ); * of the menu user interface handling code... */ void fgActivateMenu( SFG_Window* window, int button ); -void fgExecuteMenuCallback( SFG_Menu* menu ); -GLboolean fgCheckActiveMenu ( SFG_Window *window, SFG_Menu *menu ); +GLboolean fgCheckActiveMenu ( SFG_Window *window, int button, GLboolean pressed, + int mouse_x, int mouse_y ); void fgDeactivateMenu( SFG_Window *window ); void fgDeactivateSubMenu( SFG_MenuEntry *menuEntry ); @@ -839,23 +810,17 @@ void fgDisplayMenu( void ); */ void fgDisplayCursor( void ); -/* - * Elapsed time as per glutGet(GLUT_ELAPSED_TIME). - */ +/* Elapsed time as per glutGet(GLUT_ELAPSED_TIME). */ long fgElapsedTime( void ); -/* - * List functions - */ +/* List functions */ void fgListInit(SFG_List *list); void fgListAppend(SFG_List *list, SFG_Node *node); void fgListRemove(SFG_List *list, SFG_Node *node); int fgListLength(SFG_List *list); void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node); -/* - * Error Messages functions - */ +/* Error Message functions */ void fgError( const char *fmt, ... ); void fgWarning( const char *fmt, ... );