Contents
Previous
Next
This >appendix >describes >the >GLUT >compatibility >
header >file >supplied > with >FLTK. >
You >should >be >able >to >compile >existing >GLUT >
source >code >by >including > <FL/glut.H>> instead >
of ><GL/glut.h>>. > 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. > If >you >
call >any >GLUT >drawing > functions >that >FLTK >does >
not >emulate >(>glutExtensionsSupported()> , >
glutWire*()>, >glutSolid*()>, >and >
glutStroke*()> ), >you >will >also >have >to >link >
with >the >GLUT >library >(>after> 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 >3.3 >
distribution. >
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: >
- glutLayerGet(GLUT_LAYER_IN_USE)>
- glutLayerGet(GLUT_HAS_OVERLAY)>
- glutSetColor(), >glutGetColor(), >glutCopyColormap()>
- glutInitDisplayMode(GLUT_STEREO)>
- glutInitDisplayMode(GLUT_LUMINANCE)>
- glutPushWindow()>
- glutWarpPointer()>
- Spaceball, >buttonbox, >dials, >tablet >functions, >
glutDeviceGet()>
- glutWindowStatusFunc()>
- glutGet(GLUT_WINDOW_NUM_CHILDREN)>
- glutGet(GLUT_SCREEN_WIDTH_MM)>
- glutGet(GLUT_SCREEN_HEIGHT_MM)>
- glutGet(GLUT_ELAPSED_TIME)>
- glutVideoResize()> missing. >
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"). >
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. >
- Don't >call >glutInit()>. >
- Create >your >Fl_Window>, >and >any >FLTK >
widgets. > Leave >a > blank >area >in >the >window >for >
your >GLUT >window. >
- show()> the >Fl_Window>. > Perhaps >
call > show(argc,argv)>. >
- Call >window->begin()> so >that >the >GLUT >
window >will > be > automatically >added >to >it. >
- Use >glutInitWindowSize()> and >
glutInitWindowPosition()> to >set >the >location >in >
the > parent >window >to >put >the >GLUT >window. >
- Put >your >GLUT >code >next. > It >probably >does >
not >need >many >changes. > Call >window->end()>
immediately >after >the > glutCreateWindow()>! >
- You >can >call >either >glutMainLoop()>, >
Fl::run()>, >or > loop >calling >Fl::wait()>
to >run > the >program. >
Class >Hierarchy>
>Fl_Gl_Window>
> |
> +---->Fl_Glut_Window>
>
Include >Files>
>#include <FL/glut.H>
>
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()> . >
Members>
The >Fl_Glut_Window> class >contains >several >
public >members >that >can >be >altered >directly: >
member> | description> |
display> | A >pointer >to >the >function >to >
call >to >draw >the >normal >planes.> |
entry> | A >pointer >to >the >function >to >
call >when >the >mouse >moves >into > or >out >of >
the >window.> |
keyboard> | A >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.> |
mouse> | A >pointer >to >the >function >to >
call >when >a >button >is >pressed >or > released.> |
motion> | A >pointer >to >the >function >to >
call >when >the >mouse >is >moved >with > a >button >
down.> |
overlaydisplay> | A >pointer >to >the >function >
to >call >to >draw >the >overlay >planes.> |
passivemotion> | A >pointer >to >the >function >
to >call >when >the >mouse >is >moved >with > no >
buttons >down.> |
reshape> | A >pointer >to >the >function >to >
call >when >the >window >is >resized.> |
special> | A >pointer >to >the >function >to >
call >when >a >special >key >is >pressed.> |
visibility> | A >pointer >to >the >function >
to >call >when >the >window >is >iconified > or >
restored >(made >visible.)> |
Methods>
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. >
Destroys >the >GLUT >window. >
Switches >all >drawing >functions >to >the >GLUT >
window. >
Contents
Previous
Next
No comments for this page.
|