diff --git a/freeglut/freeglut/ChangeLog b/freeglut/freeglut/ChangeLog
index c85209d..c82fb93 100644
--- a/freeglut/freeglut/ChangeLog
+++ b/freeglut/freeglut/ChangeLog
@@ -992,6 +992,5 @@ mouse pointers don't work) on the way:
(259) Changed the "shapes" demo to the OpenGLUT "shapes" demo, which is much
niftier.
-
-
-
+(260) Necessary compilation fixes for newer GCCs (e.g. 3.3.5, 4.0).
+ Side effect: The shapes demo has a new 'i' key now.
diff --git a/freeglut/freeglut/progs/demos/shapes/shapes.c b/freeglut/freeglut/progs/demos/shapes/shapes.c
index 4928260..bf7664a 100644
--- a/freeglut/freeglut/progs/demos/shapes/shapes.c
+++ b/freeglut/freeglut/progs/demos/shapes/shapes.c
@@ -12,6 +12,7 @@
Keys:
- Esc Quit
- q Q Quit
+ - i I Show info
- = + Increase \a slices
- - _ Decreate \a slices
- , < Decreate \a stacks
@@ -41,7 +42,8 @@
#include
#ifdef WIN32
-#include // DUMP MEMORY LEAKS
+/* DUMP MEMORY LEAKS */
+#include
#endif
/*
@@ -61,7 +63,7 @@ static double irad = .25;
static double orad = 1.0;
static int depth = 4;
static double offset[ 3 ] = { 0, 0, 0 };
-
+static GLboolean show_info = GL_TRUE;
/*
* These one-liners draw particular objects, fetching appropriate
@@ -193,7 +195,7 @@ static void shapesPrintf (int row, int col, const char *fmt, ...)
glutBitmapWidth(font, ' ') * col,
- glutBitmapHeight(font) * (row+2) + viewport[3]
);
- glutBitmapString (font, buf);
+ glutBitmapString (font, (unsigned char*)buf);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
@@ -226,8 +228,6 @@ static void display(void)
glEnable(GL_LIGHTING);
- printf ( "Shape %d slides %d stacks %d\n", function_index, slices, stacks ) ;
-
glColor3d(1,0,0);
glPushMatrix();
@@ -247,13 +247,17 @@ static void display(void)
glDisable(GL_LIGHTING);
glColor3d(0.1,0.1,0.4);
-/* shapesPrintf (1, 3, "Shape PgUp PgDn: %s", table [function_index].name);
- shapesPrintf (2, 3, " Slices +-: %d Stacks <>: %d", slices, stacks);
- shapesPrintf (3, 3, " nSides +-: %d nRings <>: %d", slices, stacks);
- shapesPrintf (4, 3, " Depth (): %d", depth);
- shapesPrintf (5, 3, " Outer radius Up Down : %f", orad);
- shapesPrintf (6, 3, " Inner radius Left Right: %f", irad);
-*/
+ if( show_info ) {
+ shapesPrintf (1, 3, "Shape PgUp PgDn: %s", table [function_index].name);
+ shapesPrintf (2, 3, "Slices +-: %d Stacks <>: %d", slices, stacks);
+ shapesPrintf (3, 3, "nSides +-: %d nRings <>: %d", slices, stacks);
+ shapesPrintf (4, 3, "Depth (): %d", depth);
+ shapesPrintf (5, 3, "Outer radius Up Down : %f", orad);
+ shapesPrintf (6, 3, "Inner radius Left Right: %f", irad);
+ } else {
+ printf ( "Shape %d slides %d stacks %d\n", function_index, slices, stacks ) ;
+ }
+
glutSwapBuffers();
}
@@ -267,6 +271,9 @@ key(unsigned char key, int x, int y)
case 'Q':
case 'q': glutLeaveMainLoop () ; break;
+ case 'I':
+ case 'i': show_info = ( show_info == GL_TRUE ) ? GL_FALSE : GL_TRUE; break;
+
case '=':
case '+': slices++; break;
@@ -376,7 +383,8 @@ main(int argc, char *argv[])
glutMainLoop();
#ifdef WIN32
- _CrtDumpMemoryLeaks () ; // DUMP MEMORY LEAK INFORMATION
+ /* DUMP MEMORY LEAK INFORMATION */
+ _CrtDumpMemoryLeaks () ;
#endif
return EXIT_SUCCESS;
diff --git a/freeglut/freeglut/src/freeglut_internal.h b/freeglut/freeglut/src/freeglut_internal.h
index f63c1f5..06bb17e 100644
--- a/freeglut/freeglut/src/freeglut_internal.h
+++ b/freeglut/freeglut/src/freeglut_internal.h
@@ -385,8 +385,8 @@ typedef void (*SFG_Proc)();
#define SET_WCB(window,cbname,func) \
do \
{ \
- if( FETCH_WCB( window, cbname ) != func ) \
- (((window).CallBacks[CB_ ## cbname]) = (SFG_Proc) func); \
+ if( FETCH_WCB( window, cbname ) != (SFG_Proc)(func) ) \
+ (((window).CallBacks[CB_ ## cbname]) = (SFG_Proc)(func)); \
} while( 0 )
/*
diff --git a/freeglut/freeglut/src/freeglut_main.c b/freeglut/freeglut/src/freeglut_main.c
index da5bcfe..45d4165 100644
--- a/freeglut/freeglut/src/freeglut_main.c
+++ b/freeglut/freeglut/src/freeglut_main.c
@@ -858,13 +858,13 @@ void FGAPIENTRY glutMainLoopEvent( void )
if( event.type == KeyPress )
{
- keyboard_cb = FETCH_WCB( *window, Keyboard );
- special_cb = FETCH_WCB( *window, Special );
+ keyboard_cb = (FGCBKeyboard)( FETCH_WCB( *window, Keyboard ));
+ special_cb = (FGCBSpecial) ( FETCH_WCB( *window, Special ));
}
else
{
- keyboard_cb = FETCH_WCB( *window, KeyboardUp );
- special_cb = FETCH_WCB( *window, SpecialUp );
+ keyboard_cb = (FGCBKeyboard)( FETCH_WCB( *window, KeyboardUp ));
+ special_cb = (FGCBSpecial) ( FETCH_WCB( *window, SpecialUp ));
}
/* Is there a keyboard/special callback hooked for this window? */