From b18191cf306c255fe5eff7762fc8e419e043a621 Mon Sep 17 00:00:00 2001 From: Claudio Ciccani Date: Wed, 31 May 2006 17:02:45 +0000 Subject: Added DirectFB GLUT implementation. --- src/glut/directfb/internal.h | 180 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 src/glut/directfb/internal.h (limited to 'src/glut/directfb/internal.h') diff --git a/src/glut/directfb/internal.h b/src/glut/directfb/internal.h new file mode 100644 index 00000000000..787ef89543a --- /dev/null +++ b/src/glut/directfb/internal.h @@ -0,0 +1,180 @@ +/* + * 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 "GL/glut.h" +#include "GL/directfbgl.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; + + /* pointer position in fullscreen mode */ + int cx; + int cy; + int cz; + /* 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 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__ */ + -- cgit v1.2.3