00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef Fl_glut_H
00032 # define Fl_glut_H
00033
00034 # include "gl.h"
00035
00036
00037 # include "Fl.H"
00038 # include "Fl_Gl_Window.H"
00039
00044 class FL_EXPORT Fl_Glut_Window : public Fl_Gl_Window {
00045 void _init();
00046 int mouse_down;
00047 protected:
00048 void draw();
00049 void draw_overlay();
00050 int handle(int);
00051 public:
00052 int number;
00053 int menu[3];
00054 void make_current();
00055 void (*display)();
00056 void (*overlaydisplay)();
00057 void (*reshape)(int w, int h);
00058 void (*keyboard)(uchar, int x, int y);
00059 void (*mouse)(int b, int state, int x, int y);
00060 void (*motion)(int x, int y);
00061 void (*passivemotion)(int x, int y);
00062 void (*entry)(int);
00063 void (*visibility)(int);
00064 void (*special)(int, int x, int y);
00065 Fl_Glut_Window(int w, int h, const char *);
00066 Fl_Glut_Window(int x, int y, int w, int h, const char *);
00067 ~Fl_Glut_Window();
00068 };
00069
00070 extern FL_EXPORT Fl_Glut_Window *glut_window;
00071 extern FL_EXPORT int glut_menu;
00072
00073
00074 extern FL_EXPORT void (*glut_idle_function)();
00075 extern FL_EXPORT void (*glut_menustate_function)(int);
00076 extern FL_EXPORT void (*glut_menustatus_function)(int,int,int);
00077
00079
00080
00081
00082 FL_EXPORT void glutInit(int *argcp, char **argv);
00083
00084 FL_EXPORT void glutInitDisplayMode(unsigned int mode);
00085
00086 # define GLUT_RGB FL_RGB
00087 # define GLUT_RGBA FL_RGB
00088 # define GLUT_INDEX FL_INDEX
00089 # define GLUT_SINGLE FL_SINGLE
00090 # define GLUT_DOUBLE FL_DOUBLE
00091 # define GLUT_ACCUM FL_ACCUM
00092 # define GLUT_ALPHA FL_ALPHA
00093 # define GLUT_DEPTH FL_DEPTH
00094 # define GLUT_STENCIL FL_STENCIL
00095 # define GLUT_MULTISAMPLE FL_MULTISAMPLE
00096 # define GLUT_STEREO FL_STEREO
00097
00098
00099 FL_EXPORT void glutInitWindowPosition(int x, int y);
00100
00101 FL_EXPORT void glutInitWindowSize(int w, int h);
00102
00103 FL_EXPORT void glutMainLoop();
00104
00105 FL_EXPORT int glutCreateWindow(char *title);
00106 FL_EXPORT int glutCreateWindow(const char *title);
00107
00108 FL_EXPORT int glutCreateSubWindow(int win, int x, int y, int width, int height);
00109
00110 FL_EXPORT void glutDestroyWindow(int win);
00111
00112 inline void glutPostRedisplay() {glut_window->redraw();}
00113
00114 FL_EXPORT void glutPostWindowRedisplay(int win);
00115
00116 FL_EXPORT void glutSwapBuffers();
00117
00118 inline int glutGetWindow() {return glut_window->number;}
00119
00120 FL_EXPORT void glutSetWindow(int win);
00121
00122 inline void glutSetWindowTitle(char *t) {glut_window->label(t);}
00123
00124 inline void glutSetIconTitle(char *t) {glut_window->iconlabel(t);}
00125
00126 inline void glutPositionWindow(int x, int y) {glut_window->position(x,y);}
00127
00128 inline void glutReshapeWindow(int w, int h) {glut_window->size(w,h);}
00129
00130 inline void glutPopWindow() {glut_window->show();}
00131
00132 inline void glutPushWindow() { }
00133
00134 inline void glutIconifyWindow() {glut_window->iconize();}
00135
00136 inline void glutShowWindow() {glut_window->show();}
00137
00138 inline void glutHideWindow() {glut_window->hide();}
00139
00140 inline void glutFullScreen() {glut_window->fullscreen();}
00141
00142 inline void glutSetCursor(Fl_Cursor cursor) {glut_window->cursor(cursor);}
00143
00144 # define GLUT_CURSOR_RIGHT_ARROW ((Fl_Cursor)2)
00145 # define GLUT_CURSOR_LEFT_ARROW ((Fl_Cursor)67)
00146 # define GLUT_CURSOR_INFO FL_CURSOR_HAND
00147 # define GLUT_CURSOR_DESTROY ((Fl_Cursor)45)
00148 # define GLUT_CURSOR_HELP FL_CURSOR_HELP
00149 # define GLUT_CURSOR_CYCLE ((Fl_Cursor)26)
00150 # define GLUT_CURSOR_SPRAY ((Fl_Cursor)63)
00151 # define GLUT_CURSOR_WAIT FL_CURSOR_WAIT
00152 # define GLUT_CURSOR_TEXT FL_CURSOR_INSERT
00153 # define GLUT_CURSOR_CROSSHAIR FL_CURSOR_CROSS
00154 # define GLUT_CURSOR_UP_DOWN FL_CURSOR_NS
00155 # define GLUT_CURSOR_LEFT_RIGHT FL_CURSOR_WE
00156 # define GLUT_CURSOR_TOP_SIDE FL_CURSOR_N
00157 # define GLUT_CURSOR_BOTTOM_SIDE FL_CURSOR_S
00158 # define GLUT_CURSOR_LEFT_SIDE FL_CURSOR_W
00159 # define GLUT_CURSOR_RIGHT_SIDE FL_CURSOR_E
00160 # define GLUT_CURSOR_TOP_LEFT_CORNER FL_CURSOR_NW
00161 # define GLUT_CURSOR_TOP_RIGHT_CORNER FL_CURSOR_NE
00162 # define GLUT_CURSOR_BOTTOM_RIGHT_CORNER FL_CURSOR_SE
00163 # define GLUT_CURSOR_BOTTOM_LEFT_CORNER FL_CURSOR_SW
00164 # define GLUT_CURSOR_INHERIT FL_CURSOR_DEFAULT
00165 # define GLUT_CURSOR_NONE FL_CURSOR_NONE
00166 # define GLUT_CURSOR_FULL_CROSSHAIR FL_CURSOR_CROSS
00167
00168 inline void glutWarpPointer(int, int) { }
00169
00170 inline void glutEstablishOverlay() {glut_window->make_overlay_current();}
00171
00172 inline void glutRemoveOverlay() {glut_window->hide_overlay();}
00173
00174 inline void glutUseLayer(GLenum layer) {
00175 layer ? glut_window->make_overlay_current() : glut_window->make_current();}
00176 enum {GLUT_NORMAL, GLUT_OVERLAY};
00177
00178 inline void glutPostOverlayRedisplay() {glut_window->redraw_overlay();}
00179
00180 inline void glutShowOverlay() {glut_window->redraw_overlay();}
00181
00182 inline void glutHideOverlay() {glut_window->hide_overlay();}
00183
00184 FL_EXPORT int glutCreateMenu(void (*)(int));
00185
00186 FL_EXPORT void glutDestroyMenu(int menu);
00187
00188 inline int glutGetMenu() {return glut_menu;}
00189
00190 inline void glutSetMenu(int m) {glut_menu = m;}
00191
00192 FL_EXPORT void glutAddMenuEntry(char *label, int value);
00193
00194 FL_EXPORT void glutAddSubMenu(char *label, int submenu);
00195
00196 FL_EXPORT void glutChangeToMenuEntry(int item, char *labela, int value);
00197
00198 FL_EXPORT void glutChangeToSubMenu(int item, char *label, int submenu);
00199
00200 FL_EXPORT void glutRemoveMenuItem(int item);
00201
00202 inline void glutAttachMenu(int b) {glut_window->menu[b] = glut_menu;}
00203
00204 inline void glutDetachMenu(int b) {glut_window->menu[b] = 0;}
00205
00206 inline void glutDisplayFunc(void (*f)()) {glut_window->display = f;}
00207
00208 inline void glutReshapeFunc(void (*f)(int w, int h)) {glut_window->reshape=f;}
00209
00210 inline void glutKeyboardFunc(void (*f)(uchar key, int x, int y)) {
00211 glut_window->keyboard = f;}
00212
00213 inline void glutMouseFunc(void (*f)(int b, int state, int x, int y)) {
00214 glut_window->mouse = f;}
00215 # define GLUT_LEFT_BUTTON 0
00216 # define GLUT_MIDDLE_BUTTON 1
00217 # define GLUT_RIGHT_BUTTON 2
00218 # define GLUT_DOWN 0
00219 # define GLUT_UP 1
00220
00221 inline void glutMotionFunc(void (*f)(int x, int y)) {glut_window->motion= f;}
00222
00223 inline void glutPassiveMotionFunc(void (*f)(int x, int y)) {
00224 glut_window->passivemotion= f;}
00225
00226 inline void glutEntryFunc(void (*f)(int s)) {glut_window->entry = f;}
00227 enum {GLUT_LEFT, GLUT_ENTERED};
00228
00229 inline void glutVisibilityFunc(void (*f)(int s)) {glut_window->visibility=f;}
00230 enum {GLUT_NOT_VISIBLE, GLUT_VISIBLE};
00231
00232 FL_EXPORT void glutIdleFunc(void (*f)());
00233
00234 inline void glutTimerFunc(unsigned int msec, void (*f)(int), int value) {
00235 Fl::add_timeout(msec*.001, (void (*)(void *))f, (void *)(fl_intptr_t)value);
00236 }
00237
00238 inline void glutMenuStateFunc(void (*f)(int state)) {
00239 glut_menustate_function = f;}
00240
00241 inline void glutMenuStatusFunc(void (*f)(int status, int x, int y)) {
00242 glut_menustatus_function = f;}
00243 enum {GLUT_MENU_NOT_IN_USE, GLUT_MENU_IN_USE};
00244
00245 inline void glutSpecialFunc(void (*f)(int key, int x, int y)) {
00246 glut_window->special = f;}
00247 # define GLUT_KEY_F1 1
00248 # define GLUT_KEY_F2 2
00249 # define GLUT_KEY_F3 3
00250 # define GLUT_KEY_F4 4
00251 # define GLUT_KEY_F5 5
00252 # define GLUT_KEY_F6 6
00253 # define GLUT_KEY_F7 7
00254 # define GLUT_KEY_F8 8
00255 # define GLUT_KEY_F9 9
00256 # define GLUT_KEY_F10 10
00257 # define GLUT_KEY_F11 11
00258 # define GLUT_KEY_F12 12
00259
00260 # define GLUT_KEY_LEFT FL_Left
00261 # define GLUT_KEY_UP FL_Up
00262 # define GLUT_KEY_RIGHT FL_Right
00263 # define GLUT_KEY_DOWN FL_Down
00264 # define GLUT_KEY_PAGE_UP FL_Page_Up
00265 # define GLUT_KEY_PAGE_DOWN FL_Page_Down
00266 # define GLUT_KEY_HOME FL_Home
00267 # define GLUT_KEY_END FL_End
00268 # define GLUT_KEY_INSERT FL_Insert
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284 inline void glutOverlayDisplayFunc(void (*f)()) {
00285 glut_window->overlaydisplay = f;}
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302 FL_EXPORT int glutGet(GLenum type);
00303 enum {
00304 GLUT_RETURN_ZERO = 0,
00305 GLUT_WINDOW_X,
00306 GLUT_WINDOW_Y,
00307 GLUT_WINDOW_WIDTH,
00308 GLUT_WINDOW_HEIGHT,
00309 GLUT_WINDOW_PARENT,
00310 GLUT_SCREEN_WIDTH,
00311 GLUT_SCREEN_HEIGHT,
00312 GLUT_MENU_NUM_ITEMS,
00313 GLUT_DISPLAY_MODE_POSSIBLE,
00314 GLUT_INIT_WINDOW_X,
00315 GLUT_INIT_WINDOW_Y,
00316 GLUT_INIT_WINDOW_WIDTH,
00317 GLUT_INIT_WINDOW_HEIGHT,
00318 GLUT_INIT_DISPLAY_MODE,
00319 GLUT_WINDOW_BUFFER_SIZE,
00320 GLUT_VERSION
00321
00322
00323
00324
00325
00326 };
00327
00328 # define GLUT_WINDOW_STENCIL_SIZE GL_STENCIL_BITS
00329 # define GLUT_WINDOW_DEPTH_SIZE GL_DEPTH_BITS
00330 # define GLUT_WINDOW_RED_SIZE GL_RED_BITS
00331 # define GLUT_WINDOW_GREEN_SIZE GL_GREEN_BITS
00332 # define GLUT_WINDOW_BLUE_SIZE GL_BLUE_BITS
00333 # define GLUT_WINDOW_ALPHA_SIZE GL_ALPHA_BITS
00334 # define GLUT_WINDOW_ACCUM_RED_SIZE GL_ACCUM_RED_BITS
00335 # define GLUT_WINDOW_ACCUM_GREEN_SIZE GL_ACCUM_GREEN_BITS
00336 # define GLUT_WINDOW_ACCUM_BLUE_SIZE GL_ACCUM_BLUE_BITS
00337 # define GLUT_WINDOW_ACCUM_ALPHA_SIZE GL_ACCUM_ALPHA_BITS
00338 # define GLUT_WINDOW_DOUBLEBUFFER GL_DOUBLEBUFFER
00339 # define GLUT_WINDOW_RGBA GL_RGBA
00340 # define GLUT_WINDOW_COLORMAP_SIZE GL_INDEX_BITS
00341 # ifdef GL_SAMPLES_SGIS
00342 # define GLUT_WINDOW_NUM_SAMPLES GL_SAMPLES_SGIS
00343 # else
00344 # define GLUT_WINDOW_NUM_SAMPLES GLUT_RETURN_ZERO
00345 # endif
00346 # define GLUT_WINDOW_STEREO GL_STEREO
00347
00348 # define GLUT_HAS_KEYBOARD 600
00349 # define GLUT_HAS_MOUSE 601
00350 # define GLUT_HAS_SPACEBALL 602
00351 # define GLUT_HAS_DIAL_AND_BUTTON_BOX 603
00352 # define GLUT_HAS_TABLET 604
00353 # define GLUT_NUM_MOUSE_BUTTONS 605
00354 # define GLUT_NUM_SPACEBALL_BUTTONS 606
00355 # define GLUT_NUM_BUTTON_BOX_BUTTONS 607
00356 # define GLUT_NUM_DIALS 608
00357 # define GLUT_NUM_TABLET_BUTTONS 609
00358 FL_EXPORT int glutDeviceGet(GLenum type);
00359
00360
00361 # define GLUT_ACTIVE_SHIFT FL_SHIFT
00362 # define GLUT_ACTIVE_CTRL FL_CTRL
00363 # define GLUT_ACTIVE_ALT FL_ALT
00364 inline int glutGetModifiers() {return Fl::event_state() & (GLUT_ACTIVE_SHIFT | GLUT_ACTIVE_CTRL | GLUT_ACTIVE_ALT);}
00365
00366 FL_EXPORT int glutLayerGet(GLenum);
00367 # define GLUT_OVERLAY_POSSIBLE 800
00368
00369
00370 # define GLUT_TRANSPARENT_INDEX 803
00371 # define GLUT_NORMAL_DAMAGED 804
00372 # define GLUT_OVERLAY_DAMAGED 805
00373
00374 extern "C" {
00375 typedef void (*GLUTproc)();
00376 }
00377
00378 FL_EXPORT GLUTproc glutGetProcAddress(const char *procName);
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00402 struct Fl_Glut_Bitmap_Font {Fl_Font font; Fl_Fontsize size;};
00403
00404 extern FL_EXPORT struct Fl_Glut_Bitmap_Font
00405 glutBitmap9By15, glutBitmap8By13, glutBitmapTimesRoman10,
00406 glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12,
00407 glutBitmapHelvetica18;
00408 # define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15)
00409 # define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13)
00410 # define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10)
00411 # define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24)
00412 # define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10)
00413 # define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12)
00414 # define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
00415
00416 FL_EXPORT void glutBitmapCharacter(void *font, int character);
00417 FL_EXPORT int glutBitmapHeight(void *font);
00418 FL_EXPORT int glutBitmapLength(void *font, const unsigned char *string);
00419 FL_EXPORT void glutBitmapString(void *font, const unsigned char *string);
00420 FL_EXPORT int glutBitmapWidth(void *font, int character);
00421
00422 FL_EXPORT int glutExtensionSupported(char *name);
00423
00424
00425 struct Fl_Glut_StrokeVertex {
00426 GLfloat X, Y;
00427 };
00428
00429 struct Fl_Glut_StrokeStrip {
00430 int Number;
00431 const Fl_Glut_StrokeVertex* Vertices;
00432 };
00433
00434 struct Fl_Glut_StrokeChar {
00435 GLfloat Right;
00436 int Number;
00437 const Fl_Glut_StrokeStrip* Strips;
00438 };
00439
00440 struct Fl_Glut_StrokeFont {
00441 char* Name;
00442 int Quantity;
00443 GLfloat Height;
00444 const Fl_Glut_StrokeChar** Characters;
00445 };
00446 extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeRoman;
00447 extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeMonoRoman;
00448 # define GLUT_STROKE_ROMAN (&glutStrokeRoman)
00449 # define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
00450
00451 FL_EXPORT void glutStrokeCharacter(void *font, int character);
00452 FL_EXPORT GLfloat glutStrokeHeight(void *font);
00453 FL_EXPORT int glutStrokeLength(void *font, const unsigned char *string);
00454 FL_EXPORT void glutStrokeString(void *font, const unsigned char *string);
00455 FL_EXPORT int glutStrokeWidth(void *font, int character);
00456
00457
00458 FL_EXPORT void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
00459 FL_EXPORT void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
00460 FL_EXPORT void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
00461 FL_EXPORT void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
00462 FL_EXPORT void glutWireCube(GLdouble size);
00463 FL_EXPORT void glutSolidCube(GLdouble size);
00464 FL_EXPORT void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
00465 FL_EXPORT void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
00466 FL_EXPORT void glutWireDodecahedron();
00467 FL_EXPORT void glutSolidDodecahedron();
00468 FL_EXPORT void glutWireTeapot(GLdouble size);
00469 FL_EXPORT void glutSolidTeapot(GLdouble size);
00470 FL_EXPORT void glutWireOctahedron();
00471 FL_EXPORT void glutSolidOctahedron();
00472 FL_EXPORT void glutWireTetrahedron();
00473 FL_EXPORT void glutSolidTetrahedron();
00474 FL_EXPORT void glutWireIcosahedron();
00475 FL_EXPORT void glutSolidIcosahedron();
00476
00477 #endif // !Fl_glut_H
00478
00479
00480
00481