/* * Copyright (C) 2006 Claudio Ciccani * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef __GLUT_INTERNAL_H__ #define __GLUT_INTERNAL_H__ #include #include #include #include #include #include "GL/glut.h" #define VERSION_CODE( M, m, r ) (((M) << 16) | ((m) << 8) | ((r))) #define DIRECTFB_VERSION_CODE VERSION_CODE( DIRECTFB_MAJOR_VERSION, \ DIRECTFB_MINOR_VERSION, \ DIRECTFB_MICRO_VERSION ) #define DEFAULT_WIDTH 640 #define DEFAULT_HEIGHT 480 /* * Window request flags */ #define WINDOW_REQUEST_POSITION 0x00000001 #define WINDOW_REQUEST_RESIZE 0x00000002 #define WINDOW_REQUEST_RESTACK 0x00000004 #define WINDOW_REQUEST_SHOW 0x00000008 #define WINDOW_REQUEST_HIDE 0x00000010 #define WINDOW_REQUEST_DESTROY 0x00000020 /* * GLUT Window implementation */ typedef struct __GlutWindow_s { int id; DFBWindowID wid; IDirectFBWindow *window; /* NULL = fullscreen (game mode) */ IDirectFBSurface *surface; IDirectFBGL *gl; /* display mode */ GLenum mode; /* cursor position in fullscreen mode */ int cx; int cy; /* joystick position */ int jx; int jy; int jz; /* pressed modifiers */ int modifiers; /* pressed buttons */ int buttons; /* current cursor shape */ int cursor; struct { int flags; int x; int y; int w; int h; int z; } req; GLboolean visible; GLboolean redisplay; GLboolean reshape; GLboolean visibility; struct __GlutWindow_s *next; struct __GlutWindow_s *prev; } __GlutWindow; /* Global Vars */ extern IDirectFB *dfb; extern IDirectFBDisplayLayer *primary; extern IDirectFBEventBuffer *events; extern IDirectFBInputDevice *keyboard; extern IDirectFBInputDevice *mouse; extern IDirectFBInputDevice *joystick; extern GLenum g_display_mode; extern GLuint g_width; extern GLuint g_height; extern GLint g_xpos; extern GLint g_ypos; extern GLint g_bpp; extern GLboolean g_idle; extern __GlutWindow *g_current; extern __GlutWindow *g_game; /* Global Funcs */ /* window.c */ extern __GlutWindow* __glutCreateWindow( GLboolean fullscreen ); extern __GlutWindow* __glutFindWindow( DFBWindowID id ); extern void __glutSetWindow( __GlutWindow *window ); extern void __glutHandleWindows( void ); extern void __glutDestroyWindow( __GlutWindow *window ); extern void __glutDestroyWindows( void ); /* callback.c */ extern void __glutHandleTimers( void ); extern GLboolean __glutGetTimeout( int *ret_msec ); extern void __glutFreeTimers( void ); /* Global Callbacks */ extern void (GLUTCALLBACK *display_func) (void); extern void (GLUTCALLBACK *reshape_func) (int width, int height); extern void (GLUTCALLBACK *keyboard_func) (unsigned char key, int x, int y); extern void (GLUTCALLBACK *mouse_func) (int button, int state, int x, int y); extern void (GLUTCALLBACK *motion_func) (int x, int y); extern void (GLUTCALLBACK *passive_motion_func) (int x, int y); extern void (GLUTCALLBACK *entry_func) (int state); extern void (GLUTCALLBACK *visibility_func) (int state); extern void (GLUTCALLBACK *idle_func) (void); extern void (GLUTCALLBACK *menu_state_func) (int state); extern void (GLUTCALLBACK *special_func) (int key, int x, int y); extern void (GLUTCALLBACK *spaceball_motion_func) (int x, int y, int z); extern void (GLUTCALLBACK *spaceball_rotate_func) (int x, int y, int z); extern void (GLUTCALLBACK *spaceball_button_func) (int button, int state); extern void (GLUTCALLBACK *button_box_func) (int button, int state); extern void (GLUTCALLBACK *dials_func) (int dial, int value); extern void (GLUTCALLBACK *tablet_motion_func) (int x, int y); extern void (GLUTCALLBACK *tabled_button_func) (int button, int state, int x, int y); extern void (GLUTCALLBACK *menu_status_func) (int status, int x, int y); extern void (GLUTCALLBACK *overlay_display_func) (void); extern void (GLUTCALLBACK *window_status_func) (int state); extern void (GLUTCALLBACK *keyboard_up_func) (unsigned char key, int x, int y); extern void (GLUTCALLBACK *special_up_func) (int key, int x, int y); extern void (GLUTCALLBACK *joystick_func) (unsigned int buttons, int x, int y, int z); #ifdef DEBUG # define __glutAssert( exp ) {\ if (!(exp)) {\ fprintf( stderr, "(!!) *** Assertion [%s] failed in %s() ***\n",\ #exp, __FUNCTION__ ); fflush( stderr );\ exit( -1 );\ }\ } #else # define __glutAssert( exp ) #endif #define __glutWarning( format, ... ) {\ fprintf( stderr, "(!) GLUT: " format "!\n", ## __VA_ARGS__ );\ fflush( stderr );\ } #define __glutFatalError( format, ... ) {\ fprintf( stderr, "(!) GLUT: " format "!\n", ## __VA_ARGS__ );\ fprintf( stderr, "\t-> from %s() at line %d\n", __FUNCTION__, __LINE__ );\ fflush( stderr );\ exit( -1 );\ } #endif /* __GLUT_INTERNAL_H__ */