summaryrefslogtreecommitdiff
path: root/FL/glut.H
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2007-02-01 18:10:07 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2007-02-01 18:10:07 +0000
commitbda374b38662398c62d0bff5dc27620e4b39f47a (patch)
treed12c89288c53a200666468044dfb8d6a1928decd /FL/glut.H
parent51d7304d8b6c7f0525d01cedd6c232f61b8a3474 (diff)
Add GLUT support functions from FreeGLUT (STR #1522)
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5650 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'FL/glut.H')
-rw-r--r--FL/glut.H157
1 files changed, 85 insertions, 72 deletions
diff --git a/FL/glut.H b/FL/glut.H
index c2126622c..e4c7cdce4 100644
--- a/FL/glut.H
+++ b/FL/glut.H
@@ -3,7 +3,7 @@
//
// GLUT emulation header file for the Fast Light Tool Kit (FLTK).
//
-// Copyright 1998-2005 by Bill Spitzak and others.
+// Copyright 1998-2007 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -43,15 +43,14 @@
// Commented out lines indicate parts of GLUT that are not emulated.
-#ifndef __glut_h__
-# define __glut_h__
+#ifndef Fl_glut_H
+# define Fl_glut_H
# include "gl.h"
-//# include <GL/glu.h>
////////////////////////////////////////////////////////////////
// GLUT is emulated using this window class and these static variables
-// (plus several more static variables hidden in glut.C):
+// (plus several more static variables hidden in glut_compatability.cxx):
# include "Fl.H"
# include "Fl_Gl_Window.H"
@@ -144,7 +143,7 @@ inline void glutReshapeWindow(int w, int h) {glut_window->size(w,h);}
inline void glutPopWindow() {glut_window->show();}
-//inline void glutPushWindow();
+inline void glutPushWindow() { /* do nothing */ }
inline void glutIconifyWindow() {glut_window->iconize();}
@@ -180,7 +179,7 @@ inline void glutSetCursor(Fl_Cursor cursor) {glut_window->cursor(cursor);}
# define GLUT_CURSOR_NONE FL_CURSOR_NONE
# define GLUT_CURSOR_FULL_CROSSHAIR FL_CURSOR_CROSS
-//inline void glutWarpPointer(int x, int y);
+inline void glutWarpPointer(int, int) { /* do nothing */ }
inline void glutEstablishOverlay() {glut_window->make_overlay_current();}
@@ -208,7 +207,7 @@ FL_EXPORT void glutAddMenuEntry(char *label, int value);
FL_EXPORT void glutAddSubMenu(char *label, int submenu);
-FL_EXPORT void glutChangeToMenuEntry(int item, char *label, int value);
+FL_EXPORT void glutChangeToMenuEntry(int item, char *labela, int value);
FL_EXPORT void glutChangeToSubMenu(int item, char *label, int submenu);
@@ -323,12 +322,8 @@ enum {
GLUT_WINDOW_WIDTH,
GLUT_WINDOW_HEIGHT,
GLUT_WINDOW_PARENT,
-//GLUT_WINDOW_NUM_CHILDREN,
-//GLUT_WINDOW_CURSOR,
GLUT_SCREEN_WIDTH,
GLUT_SCREEN_HEIGHT,
-//GLUT_SCREEN_WIDTH_MM,
-//GLUT_SCREEN_HEIGHT_MM,
GLUT_MENU_NUM_ITEMS,
GLUT_DISPLAY_MODE_POSSIBLE,
GLUT_INIT_WINDOW_X,
@@ -336,8 +331,13 @@ enum {
GLUT_INIT_WINDOW_WIDTH,
GLUT_INIT_WINDOW_HEIGHT,
GLUT_INIT_DISPLAY_MODE,
+ GLUT_WINDOW_BUFFER_SIZE,
+ GLUT_VERSION
+//GLUT_WINDOW_NUM_CHILDREN,
+//GLUT_WINDOW_CURSOR,
+//GLUT_SCREEN_WIDTH_MM,
+//GLUT_SCREEN_HEIGHT_MM,
//GLUT_ELAPSED_TIME,
- GLUT_WINDOW_BUFFER_SIZE
};
# define GLUT_WINDOW_STENCIL_SIZE GL_STENCIL_BITS
@@ -360,17 +360,17 @@ enum {
# endif
# define GLUT_WINDOW_STEREO GL_STEREO
-//int glutDeviceGet(GLenum type);
-//#define GLUT_HAS_KEYBOARD 600
-//#define GLUT_HAS_MOUSE 601
-//#define GLUT_HAS_SPACEBALL 602
-//#define GLUT_HAS_DIAL_AND_BUTTON_BOX 603
-//#define GLUT_HAS_TABLET 604
-//#define GLUT_NUM_MOUSE_BUTTONS 605
-//#define GLUT_NUM_SPACEBALL_BUTTONS 606
-//#define GLUT_NUM_BUTTON_BOX_BUTTONS 607
-//#define GLUT_NUM_DIALS 608
-//#define GLUT_NUM_TABLET_BUTTONS 609
+# define GLUT_HAS_KEYBOARD 600
+# define GLUT_HAS_MOUSE 601
+# define GLUT_HAS_SPACEBALL 602
+# define GLUT_HAS_DIAL_AND_BUTTON_BOX 603
+# define GLUT_HAS_TABLET 604
+# define GLUT_NUM_MOUSE_BUTTONS 605
+# define GLUT_NUM_SPACEBALL_BUTTONS 606
+# define GLUT_NUM_BUTTON_BOX_BUTTONS 607
+# define GLUT_NUM_DIALS 608
+# define GLUT_NUM_TABLET_BUTTONS 609
+inline int glutDeviceGet(GLenum type) { return type <= GLUT_HAS_MOUSE; }
// WARNING: these values are different than GLUT uses:
# define GLUT_ACTIVE_SHIFT FL_SHIFT
@@ -378,7 +378,7 @@ enum {
# define GLUT_ACTIVE_ALT FL_ALT
inline int glutGetModifiers() {return Fl::event_state() & (GLUT_ACTIVE_SHIFT | GLUT_ACTIVE_CTRL | GLUT_ACTIVE_ALT);}
-int glutLayerGet(GLenum);
+FL_EXPORT int glutLayerGet(GLenum);
# define GLUT_OVERLAY_POSSIBLE 800
//#define GLUT_LAYER_IN_USE 801
//#define GLUT_HAS_OVERLAY 802
@@ -386,6 +386,12 @@ int glutLayerGet(GLenum);
# define GLUT_NORMAL_DAMAGED 804
# define GLUT_OVERLAY_DAMAGED 805
+extern "C" {
+typedef void (*GLUTproc)();
+}
+
+FL_EXPORT GLUTproc glutGetProcAddress(const char *procName);
+
//inline int glutVideoResizeGet(GLenum param);
//#define GLUT_VIDEO_RESIZE_POSSIBLE 900
//#define GLUT_VIDEO_RESIZE_IN_USE 901
@@ -406,11 +412,8 @@ int glutLayerGet(GLenum);
//inline void glutVideoPan(int x, int y, int width, int height);
-////////////////////////////////////////////////////////////////
-// Emulated GLUT drawing functions:
-
// Font argument must be a void* for compatability, so...
-extern FL_EXPORT struct Glut_Bitmap_Font {uchar font; int size;}
+extern FL_EXPORT struct Fl_Glut_Bitmap_Font {uchar font; int size;}
glutBitmap9By15, glutBitmap8By13, glutBitmapTimesRoman10,
glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12,
glutBitmapHelvetica18;
@@ -423,57 +426,67 @@ extern FL_EXPORT struct Glut_Bitmap_Font {uchar font; int size;}
# define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
FL_EXPORT void glutBitmapCharacter(void *font, int character);
-FL_EXPORT int glutBitmapWidth(void *font, int character);
+FL_EXPORT int glutBitmapHeight(void *font);
FL_EXPORT int glutBitmapLength(void *font, const unsigned char *string);
+FL_EXPORT void glutBitmapString(void *font, const unsigned char *string);
+FL_EXPORT int glutBitmapWidth(void *font, int character);
-////////////////////////////////////////////////////////////////
-// GLUT drawing functions. These are NOT emulated but you can
-// link in the glut library to get them. This assumes the object
-// files in GLUT remain as they currently are so that there are
-// not symbol conflicts with the above.
+FL_EXPORT int glutExtensionSupported(char *name);
-extern "C" {
-
-extern int APIENTRY glutExtensionSupported(char *name);
+/* GLUT stroked font sub-API */
+struct Fl_Glut_StrokeVertex {
+ GLfloat X, Y;
+};
-/* Stroke font constants (use these in GLUT program). */
-# ifdef WIN32
-# define GLUT_STROKE_ROMAN ((void*)0)
-# define GLUT_STROKE_MONO_ROMAN ((void*)1)
-# else
-extern void *glutStrokeRoman;
-# define GLUT_STROKE_ROMAN (&glutStrokeRoman)
-extern void *glutStrokeMonoRoman;
-# define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
-# endif
+struct Fl_Glut_StrokeStrip {
+ int Number;
+ const Fl_Glut_StrokeVertex* Vertices;
+};
-/* GLUT font sub-API */
-extern void APIENTRY glutStrokeCharacter(void *font, int character);
-extern int APIENTRY glutStrokeWidth(void *font, int character);
+struct Fl_Glut_StrokeChar {
+ GLfloat Right;
+ int Number;
+ const Fl_Glut_StrokeStrip* Strips;
+};
-/* GLUT pre-built models sub-API */
-extern void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
-extern void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
-extern void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
-extern void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
-extern void APIENTRY glutWireCube(GLdouble size);
-extern void APIENTRY glutSolidCube(GLdouble size);
-extern void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
-extern void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
-extern void APIENTRY glutWireDodecahedron();
-extern void APIENTRY glutSolidDodecahedron();
-extern void APIENTRY glutWireTeapot(GLdouble size);
-extern void APIENTRY glutSolidTeapot(GLdouble size);
-extern void APIENTRY glutWireOctahedron();
-extern void APIENTRY glutSolidOctahedron();
-extern void APIENTRY glutWireTetrahedron();
-extern void APIENTRY glutSolidTetrahedron();
-extern void APIENTRY glutWireIcosahedron();
-extern void APIENTRY glutSolidIcosahedron();
+struct Fl_Glut_StrokeFont {
+ char* Name; // The source font name
+ int Quantity; // Number of chars in font
+ GLfloat Height; // Height of the characters
+ const Fl_Glut_StrokeChar** Characters;// The characters mapping
+};
+extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeRoman;
+extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeMonoRoman;
+# define GLUT_STROKE_ROMAN (&glutStrokeRoman)
+# define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
-}
+FL_EXPORT void glutStrokeCharacter(void *font, int character);
+FL_EXPORT GLfloat glutStrokeHeight(void *font);
+FL_EXPORT int glutStrokeLength(void *font, const unsigned char *string);
+FL_EXPORT void glutStrokeString(void *font, const unsigned char *string);
+FL_EXPORT int glutStrokeWidth(void *font, int character);
-#endif /* !__glut_h__ */
+/* GLUT pre-built models sub-API */
+FL_EXPORT void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
+FL_EXPORT void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
+FL_EXPORT void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+FL_EXPORT void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+FL_EXPORT void glutWireCube(GLdouble size);
+FL_EXPORT void glutSolidCube(GLdouble size);
+FL_EXPORT void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+FL_EXPORT void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+FL_EXPORT void glutWireDodecahedron();
+FL_EXPORT void glutSolidDodecahedron();
+FL_EXPORT void glutWireTeapot(GLdouble size);
+FL_EXPORT void glutSolidTeapot(GLdouble size);
+FL_EXPORT void glutWireOctahedron();
+FL_EXPORT void glutSolidOctahedron();
+FL_EXPORT void glutWireTetrahedron();
+FL_EXPORT void glutSolidTetrahedron();
+FL_EXPORT void glutWireIcosahedron();
+FL_EXPORT void glutSolidIcosahedron();
+
+#endif // !Fl_glut_H
//
// End of "$Id$".