From 501690edce2cecc356334fc42e7f429907cdfa1e Mon Sep 17 00:00:00 2001 From: Fabien Costantini Date: Fri, 17 Oct 2008 11:08:15 +0000 Subject: Last test does keep history, lets add all related files and patch them afterwards... git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6447 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- documentation/src_doc/glut.dox | 248 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 documentation/src_doc/glut.dox (limited to 'documentation/src_doc/glut.dox') diff --git a/documentation/src_doc/glut.dox b/documentation/src_doc/glut.dox new file mode 100644 index 000000000..18d4f25bd --- /dev/null +++ b/documentation/src_doc/glut.dox @@ -0,0 +1,248 @@ +/** + + \page glut D - GLUT Compatibility + +This appendix describes the GLUT compatibility header file supplied with +FLTK. FLTK's GLUT compatibility is based on the original GLUT 3.7 and +the follow-on FreeGLUT 2.4.0 libraries. + +\section glut_using Using the GLUT Compatibility Header File + +You should be able to compile existing GLUT source code by including + instead of . This can be +done by editing the source, by changing the -I switches to +the compiler, or by providing a symbolic link from GL/glut.h +to FL/glut.H. + +All files calling GLUT procedures must be compiled with C++. You +may have to alter them slightly to get them to compile without warnings, +and you may have to rename them to get make to use the C++ compiler. + +You must link with the FLTK library. Most of FL/glut.H +is inline functions. You should take a look at it (and maybe at +test/glpuzzle.cxx in the FLTK source) if you are having trouble +porting your GLUT program. + +This has been tested with most of the demo programs that come with +the GLUT and FreeGLUT distributions. + +\section glut_known_problems Known Problems + +The following functions and/or arguments to functions are missing, +and you will have to replace them or comment them out for your code +to compile: + +\li glutGet(GLUT_ELAPSED_TIME) +\li glutGet(GLUT_SCREEN_HEIGHT_MM) +\li glutGet(GLUT_SCREEN_WIDTH_MM) +\li glutGet(GLUT_WINDOW_NUM_CHILDREN) +\li glutInitDisplayMode(GLUT_LUMINANCE) +\li glutLayerGet(GLUT_HAS_OVERLAY) +\li glutLayerGet(GLUT_LAYER_IN_USE) +\li glutPushWindow() +\li glutSetColor(), glutGetColor(), glutCopyColormap() +\li glutVideoResize() missing. +\li glutWarpPointer() +\li glutWindowStatusFunc() +\li Spaceball, buttonbox, dials, and tablet functions + +Most of the symbols/enumerations have different values than GLUT uses. +This will break code that relies on the actual values. The only +symbols guaranteed to have the same values are true/false pairs like +GLUT_DOWN and GLUT_UP, mouse buttons +GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON, and +GLUT_KEY_F1 thru F12. + +The strings passed as menu labels are not copied. + +glutPostRedisplay() does not work if called from inside a +display function. You must use glutIdleFunc() if you want +your display to update continuously. + +glutSwapBuffers() does not work from inside a display +function. This is on purpose, because FLTK swaps the buffers for you. + +glutUseLayer() does not work well, and should only be used +to initialize transformations inside a resize callback. You should +redraw overlays by using glutOverlayDisplayFunc(). + +Overlays are cleared before the overlay display function is called. +glutLayerGet(GLUT_OVERLAY_DAMAGED) always returns true for +compatibility with some GLUT overlay programs. You must rewrite your +code so that gl_color() is used to choose colors in an +overlay, or you will get random overlay colors. + +glutSetCursor(GLUT_CURSOR_FULL_CROSSHAIR) just results in a +small crosshair. + +The fonts used by glutBitmapCharacter() and glutBitmapWidth() +may be different. + +glutInit(argc,argv) will consume different switches than +GLUT does. It accepts the switches recognized by +Fl::args(), and will accept any abbreviation of these +switches (such as "-di" for "-display"). + +\section glut_mixing Mixing GLUT and FLTK Code + +You can make your GLUT window a child of a Fl_Window with the +following scheme. The biggest trick is that GLUT insists on +show()'ing the window at the point it is created, which means the +Fl_Window parent window must already be shown. + +\li Don't call glutInit(). +\li Create your Fl_Window, and any FLTK widgets. Leave a + blank area in the window for your GLUT window. +\li show() the Fl_Window. Perhaps call + show(argc,argv). +\li Call window->begin() so that the GLUT window will be + automatically added to it. +\li Use glutInitWindowSize() and glutInitWindowPosition() + to set the location in the parent window to put the GLUT window. +\li Put your GLUT code next. It probably does not need many changes. + Call window->end() immediately after the + glutCreateWindow()! +\li You can call either glutMainLoop(), Fl::run(), + or loop calling Fl::wait() to run the program. + +
+ + \section glut_Fl_Glut_Window class Fl_Glut_Window +\htmlonly +
+ +\subsection glut_class_hierarchy Class Hierarchy + +\code +Fl_Gl_Window + | + +----Fl_Glut_Window +\endcode + +\subsection glut_include_files Include Files + +\code +#include +\endcode + +\subsection glut_description Description + +Each GLUT window is an instance of this class. You may find it useful +to manipulate instances directly rather than use GLUT window id's. +These may be created without opening the display, and thus can fit +better into FLTK's method of creating windows. + +The current GLUT window is available in the global variable +glut_window.

+ +new Fl_Glut_Window(...) is the same as +glutCreateWindow() except it does not show() the window +or make the window current.

+ +window->make_current() is the same as glutSetWindow(number). +If the window has not had show() called on it yet, some functions +that assumme an OpenGL context will not work. +If you do show() the window, call make_current() +again to set the context.

+ +~Fl_Glut_Window() is the same as glutDestroyWindow(). + +\subsection glut_members Members + +The Fl_Glut_Window class contains several public members that can +be altered directly: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
memberdescription
displayA pointer to the function to call to draw the normal planes.
entryA pointer to the function to call when the mouse moves into + or out of the window.
keyboardA pointer to the function to call when a regular key is pressed.
menu[3]The menu to post when one of the mouse buttons is pressed.
mouseA pointer to the function to call when a button is pressed or + released.
motionA pointer to the function to call when the mouse is moved with + a button down.
overlaydisplayA pointer to the function to call to draw the overlay planes.
passivemotionA pointer to the function to call when the mouse is moved with + no buttons down.
reshapeA pointer to the function to call when the window is resized.
specialA pointer to the function to call when a special key is pressed.
visibilityA pointer to the function to call when the window is iconified + or restored (made visible.)
+ +\subsection glut_methods Methods + +\li Fl_Glut_Window +\li ~Fl_Glut_Window +\li make_current + + +Fl_Glut_Window::Fl_Glut_Window(int x, int y, int w, int h, const char +*title = 0)
+Fl_Glut_Window::Fl_Glut_Window(int w, int h, const char *title = 0) + +\par +The first constructor takes 4 int arguments to create the window with +a preset position and size. The second constructor with 2 arguments +will create the window with a preset size, but the window manager will +choose the position according to it's own whims. + + +virtual Fl_Glut_Window::~Fl_Glut_Window() + +\par +Destroys the GLUT window. + + +void Fl_Glut_Window::make_current() + +\par +Switches all drawing functions to the GLUT window. + +
+[Index]    +[Previous]  + \ref enumerations    +[Next]  + \ref forms + +\endhtmlonly +*/ -- cgit v1.2.3