To build and install GLUT Framework: |
------------------------------------ |
Launch terminal |
# change to glut project directory |
cd (GLUT project directory) |
# build the framework into /tmp |
# Note: glut should be built with gcc3 or greater |
xcodebuild install |
# copy the framework and replace the existing one (note, sudo requires the admin password) |
sudo ditto /tmp/GLUT_External.dst/System/Library/Frameworks/GLUT.framework /System/Library/Frameworks/GLUT.framework |
NOTE: Due to archiving and unarchiving for posting of this sample code, the |
libForeground.a library may have inconsistant dates (Xcode will note |
this error if it exists). The can be fixed by running "ranlib" on this |
library as follows: |
# change to glut project directory |
cd (GLUT project directory) |
# update Foreground.o library |
ranlib libForeground.a |
NOTE: Installing a software update, which contains GLUT, over top of this |
build will replace the framework built by this sample code. Developers should |
rebuild/reinstall this development build after a software update. |
GLUT for Mac OS X (GLUT-3.4.0) Read Me (4/10/2007) |
=========================== |
Additions: |
---------- |
*) Support for Garbage Collection |
*) Support for HiDPI |
GLUT for Mac OS X (GLUT-3.3.9) Read Me (10/10/2005) |
=========================== |
Additions: |
---------- |
*) Added no_recovery support for pixel format selection. Logic added to both |
mode enums and string handling. |
GLUT for Mac OS X (GLUT-3.3.8) Read Me (9/22/2005) |
=========================== |
Bug Fixes: |
---------- |
*) Fixed full screen stereo handling. |
*) Fixed inverted print/save/copy images. |
GLUT for Mac OS X (GLUT-3.3.7) Read Me (8/30/2005) |
=========================== |
Additions: |
---------- |
*) Added support for windowed stereo. You can still get full screen stereo by using the fullscreen APIs in GLUT. |
Bug Fixes: |
---------- |
*) Fixed state handling in print and save along with better alpha handling. |
GLUT for Mac OS X (GLUT-3.3.6) Read Me (4/7/2005) |
=========================== |
Additions: |
---------- |
*) Improvement in glutGetProcAddress dyld handling. |
Bug Fixes: |
---------- |
*) Fixed bundle detection code to allow resources for packaged GLUT apps and console apps to run seamlessly. |
*) Fixed a number of minor warnings. |
*) Fix: (3526681) slow launch due to HID devices. |
*) Fix: (3935188) Issue with lack of autorelease pool at shutdown. |
*) Fix: (3961182) GLUT project fails to build with gcc-4.0 |
*) Fixed a number of minor warnings. |
*) Fix: (3495231) GLUT 3 button mouse: if 2/3 buttons depressed, not all releases registered |
*) Fix: (3481381) OpenGL Glut Framework prepareForMiniaturization |
*) Fix: (3526681) glutSetCursor not behaving as expected |
*) Fix: (3852364) GLUT keyboard input stuck keys |
*) Fix: (3928640) GLUT Prefs "Set Defaults" button does not work |
*) Fix: (3928650) GLUT Prefs can save zero height default window size |
*) Fix: (3935190) glutTimerFunc doesn't work |
*) Fix: (3450425) glutLeaveGameMode doesn't leave fullscreen |
*) Fix: (3494200) glut resize bug |
*) Fix: (3495227) GLUT callbacks to joysticks/gamepads: rarely work correctly |
*) Fix: (3569992) Convert GLUT to native Xcode |
*) Fix: (3655228) glut window visibility events are not properly generated (glutFullScreen related) |
*) Fix: (3935184) glutEnterGameMode() spews "glutEnterGameMode entered" |
*) Fix: (3935591) glutSetCursor(GLUT_CURSOR_NONE) doesn't work |
GLUT for Mac OS X (GLUT-3.2.8) Read Me |
=========================== |
Additions: |
---------- |
*) Spaceball support for devices with 6+ axis, fully configurable. |
*) Added ability to use -useExtendedDesktop to allow glut to consider the |
full multi-monitor desktop when doing full screen windows and for window |
location. Note the upper left of the desktop will be consider by glut to |
be (0, 0) no matter where the menu bar is. Current driver issues prevent |
good spanning full screen performance at this time, but a fix is in work. |
*) The visibility of MacOS X specific GLUT API extensions is now controlled |
by the GLUT_MACOSX_IMPLEMENTATION pre-processor macro. By default, all |
extensions are enabled. You may however turn them off by setting |
GLUT_MACOSX_IMPLEMENTATION to 0 before including the glut.h header. That |
way its easy to check whether your GLUT application is calling MacOS X |
specific APIs or not. |
*) Packaged GLUT applications now get automatically an About dialog. The dialog |
displays the application's version information and some optional text. |
The version number is taken from the CFBundleShortVersionString from the |
Info.plist. The optional text should be stored in a file called 'Credits.rtf' |
in the application's Resource folder. |
*) Added glutCheckLoop() and glutWMCloseFunc() APIs based on the same functions |
developed by Mr. Rob Fletcher for the Win32 GLUT version. |
*) Imported glutGetProcAddress() function from the Mesa3D project. |
*) Imported GLUT_FPS environment variable from the Mesa3D project. |
*) New preferences dialog. Allows global configuration of: |
- initialization variables (will affect next window creation or app launch |
depending on scope of configuration item) |
- Mouse emulation (normally turned on if a mouse with < 3 buttons is |
found but can be enabled manually and emulation keys are configurable) |
- Joystick setup (any device with at least two axis can be configured, one |
device only will control all joystick inputs but specific inputs can be |
rearranged) |
- Spaceball setup (same notes as joystick) |
Prefs affect all glut applications and are saved globally. Defaults can be |
set to go back to initial conditions. Note, joystick and spaceball |
configuration modification take place immediately while others only |
take affect after pressing OK. |
Bug Fixes: |
---------- |
1) Switching a window to fullscreen mode and back again (glutFullscreen()) now |
works more reliably. I.e. sub-windows with installed glutMotionFunc callbacks |
should no longer stop calling the callback after executing glutFullscreen(). |
2) GLUT no longer calls a window's mouse callback with GLUT_UP, if the user |
dismissed a context menu by clicking outside the on-screen menu. |
3) Fixes for initial sub-window focus. |
4) Fix for better menu handling |
5) Fix full screen to allow it to be entered more than once |
6) Fix button callbacks to allow destruction of a window |
7) Fix full screen sub-window handling |
8) Fix poor work event and timer interaction |
GLUT for Mac OS X (GLUT-3.1) Read Me |
=========================== |
Additions: |
---------- |
*) Added glutSurfaceTexture (GLenum target, GLenum internalformat, int surfacewin) |
target: Specifies an allowable 2D OpenGL texture target such as GL_TEXTURE_2D |
or GL_TEXTURE_RECTANGLE_EXT. |
internalformat: Specifies the internal texture layout, which must be a supported |
format listed on table 3.15, 3.16, 3.17 or 3.18 of the OpenGL 1.3 Specification. |
surfacewin: Specifies the GLUT window from which to get the texture. |
glutSurfaceTexture allows direct texturing from a window by using the window |
contents as the source data for the texture, behaving much the same way as |
glTexImage2D. The texture target, internal format must be supported the |
renderer of the target context. Additionally, the source window geometry |
must be compatible with the texture target. Thus, if the texture target is |
GL_TEXTURE_2D, the window must conform to power of two dimensions. |
This routine is designed for performance so the graphics driver will attempt |
to provide an optimum data path, keeping the data in VRAM if possible. Also, |
there is no window tracking, thus both target and source windows must be on |
the same virtual screen (renderer) or failure (likely lack of texturing) |
will result. |
*) GLUT now supports the UTF8 character encoding. This means that all functions |
which take strings, interpret them in the UTF8 encoding. |
Bug Fixes: |
---------- |
1) glutInit() now correctly validates the time interval values given |
to -menuIdleInterval and -fadeInterval. |
2) Improved GLUT shutdown. GLUT now guarantees that any atexit() handlers |
installed by the application are called before GLUT starts its own |
cleanup process. The only precondition for this to work is that the |
application installs its atexit() handlers AFTER it has called glutInit(). |
3) Made showing of hidden sub-windows, which contain themselves sub-windows, |
more reliable. |
4) All keyboard input is now passed to GLUT apps in the UTF8 character encoding. |
One important consequence of this change is that GLUT apps should now better |
work with non-US keyboards (i.e. Alt-5 should now correctly produce a '[' |
character with German keyboards). |
GLUT for Mac OS X (GLUT-3.0) Read Me |
=========================== |
Additions: |
---------- |
*) Added -useMacOSCoords command line argument to allow negative coords to be |
correctly mapped to the Mac OS X desktop space. If this is not enabled, GLUT |
functions per the spec and maps all negative coords to defaults. If this option |
is provided all coords supplied after this option will be used as is and will |
be directly mapped the desktop (including moving the window completely off |
screen if the coords are not visible). |
*) Added -menuIdleInterval command line argument to set the interval for |
idle events when the menus are shown, default is 0.016 seconds. |
*) Added -fadeInterval command line argument to set the length of screen fades into |
and out of gamemode, default is 1.0 second. |
*) Added stereo support. This requires full screen and glutGameMode. So set |
the pixel format to stereo and enter gamemode to get stereo contexts. Apps |
will need to draw required sync lines for whatever 3D glasses they are using, |
see developer.apple.com/samplecode for examples. Here is an initialization |
example: |
glutInit(&argc, (char **)argv); |
// stereo display mode for glut |
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STEREO); |
// must now use full screen game mode |
glutGameModeString("1024x768:32@120"); |
// enter gamemode to get stereo context |
// (may get invalid drawable warnings in console, |
// this is normal and will be fixed in the future) |
glutEnterGameMode(); |
*) Added complete joystick support including a configuration dialog and multi-device |
support. To avoid strange axis and button mappings GLUT looks for devices which |
report themselves as joystick or gamepad. |
*) Added better multi-button mouse support. Should now use 3 native buttons with mice |
which have 3 buttons or more and emulate (cntl-click = right click, opt-click = |
middle click) with mice which have 1 or 2 buttons. The three buttons glut looks for |
are left, right and other in Cocoa or button 1,2 and 3 in HID terms, if a |
custom mouse driver re-maps these then glut will not see the correct button |
press. |
*) Add -captureSingleDisplay launch parameter to allow the capturing of only one display |
when entering game mode. |
*) Implemented GLUT_CURSOR_DESTROY selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_CYCLE selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_SPRAY selector for glutSetCursor() |
*) Implemented all sizing cursor selectors for glutSetCursor() |
*) Improved GLUT_CURSOR_CROSSHAIR |
Bug Fixes: |
---------- |
1) glutCreateWindow() now correctly sets the window title to the given |
window title string, if any. |
2) GLUT now correctly calls any passive motion and/or entry callback for |
sub-windows if the glutPassiveMotionFunc(), glutEntryFunc() are called |
before the sub-window has become visible. Previously, the callback were |
only called after the user resized the top-level window which contained |
the sub-windows at least once. |
3) Normally, glut changes the working directory to the resources directory of |
the applications package. This allows textures and other app resources |
to be packaged with the application. GLUT will detect the lack of this |
directory, such as with a non-packaged command line application and not |
change the working directory. Additionally, added the ability to specify |
a working directory option -useWorkingDir as a command line argument which |
will also prevent GLUT from changing the initial working directory. |
4) Fixed window miniturization code to not detach surfaces. |
5) Updated event handling to be more responsive and use less CPU, results in modest |
performance gains in some cases. |
6) Handle lazy surface creation much better. |
7) Fixed GLUT initialization code to allow command line apps to run in the foreground |
and accept keyboard and menu input. |
8) Fixed sub-window visibiloty issues. |
9) Fixed game mode refresh rate handling to use doubles to get values from dictionary |
otherwise many refresh rates will fail to be returned and thus the display mode |
will not be recognized. |
10) Numerous other fixes. |
GLUT for Mac OS X Read Me |
=========================== |
Additions: |
---------- |
*) Implemented GLUT_CURSOR_CROSSHAIR selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_FULL_CROSSHAIR selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_HELP selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_LEFT_RIGHT selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_RIGHT_ARROW selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_UP_DOWN selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_WAIT selector for glutSetCursor() |
Bug Fixes: |
---------- |
1) A timer function set via glutTimerFunc() would be called up to a second too |
early. I.e. requested timeout 500ms -> timer fired instantly. |
2) Top-level windows destroyed before a call to glutMainLoop() would not be |
immediately freed, rather they would stay around until the main loop was |
entered. |
3) Clicking in a sub-window now makes it actually the first responder so that it |
is able to receive key down/up events. |
4) Menus now work like with any other GLUT implementation, which means that they |
are now ALWAYS contextual menus. While this change means that GLUT apps now |
no longer really work like other Aqua apps, it does however mean that this |
GLUT release operates now MUCH more like GLUT implementations on other |
platforms. Thus, the menu status function is now called with the real mouse |
position, the correct window is now made current and the selected menu is now |
also made current prior to calling any menu related callbacks. |
Further, we now also support the ability to assign a menu multiple times to |
different menu items as a submenu. |
Also, we now correctly support menus for sub-windows (the old implementation |
would only allow the creation AND usage of up to three menus and simply ignore |
any additional menus created after that point, so i.e. menus of a sub-window |
were never accessible by the user). |
Accessing menus with a one-button mouse: |
Control + Shift: GLUT_LEFT_BUTTON menu |
Control + Alternate: GLUT_MIDDLE_BUTTON menu |
Control: GLUT_RIGHT_BUTTON menu |
5) The menu status function and menu item callback are now called in the correct |
order: menuStatusFunc(GLUT_MENU_NOT_IN_USE) followed by menuItemFunc(item). |
6) Determination of window & sub-window visibility is now _dramatically_ faster |
than it used to be, especially with many windows (> 20). |
7) glutWarpPointer() now works as expected. |
8) glutInitDisplayString() should now work as documented in its man page. It simply |
ignored any matching criteria in earlier releases. Consequently, if i.e. you |
asked for a stencil buffer with at least 3 bits depth, you couldn't actually be |
sure that you really got 3 bits worth of stencil. You may have ended up with a |
valid OpenGL context with no stencil buffer at all. |
9) glutInitDisplayMode() is now much stricter in its operation. I.e. it now |
correctly rejects an attempt to create an indexed OpenGL context as MacOS X |
doesn't support indexed pixel formats. |
10) glutFullScreen() now makes the current window really cover the whole screen. |
11) glutGet(GLUT_WINDOW_PARENT) now also works correctly for hidden sub-windows. |
12) glutGet(GLUT_DISPLAY_MODE_POSSIBLE) now works as advertised. Previously it |
would return 1 for pixel formats which were actually not supported. |
13) De-miniaturizing a top-level window with sub-windows would result in a window |
were none of the sub-windows would be visible. Sub-windows now work correctly |
after window de-miniturization. |
14) The mini-window of a de-miniturized now correctly shows a snapshot of all |
sub-windows of the de- miniturized window. The same is true for window snapshots |
taken by Edit/Copy and for services. |
15) Fixed handling of GL commands immediately after window creation but before the |
main loop. The window is now shown immediately but the events are deferred |
until run main loop is called. |
16) fixed pixel format handling to not pass un-needed parameteres to GL. Should |
result in more reliability in get pixel formats. |
17) Cleaned up multi-sample handling. |
18) Fixed event handled to use a CFTimer for GLUT events that is separate from the |
NSEvent queue. |
GLUT for Mac OS X Read Me |
=========================== |
Bug Fixes: |
---------- |
1) Creating a menu and destroying it before entering the main event loop via |
glutMainLoop() would crash the application. |
2) Turning a menu item with an associated submenu into a regular menu item |
would result in a menu item which never invoked its associated callback. |
3) Top-level windows would be positioned incorrectly. |
4) glutGet(GLUT_WINDOW_Y) would always return the wrong position for a top- |
level window. |
5) No visibility changed events would be generated for visibility changes |
caused by top-level windows. |
6) Window visibility calculation code was wrong most of the time which |
resulted in calls to a window's status callback with the wrong visibility |
code or no call at all (especially for sub-windows). |
7) Hiding/Unhiding a GLUT application would not update the window status |
of GLUT windows which had the effect that apps continued to consume |
CPU cycles while hidden. |
7) We now generate 'real' visibility events just like X Windows does which |
means that we have now the same semantics on Mac OS X as under X Windows. |
8) Complete rewrite of the work event mechansim (deferred updates). The new |
implementation is semantically 99.9% the same as the X Windows implementation |
and much more efficient. I.e. we always only generate at most one Work |
event per AppKit event. Previously, every single glutPostWindowRedisplay() |
would generate two Work events per AppKit event. Now at most one single |
Work event is generated independent of the number of glutPostWindowRedisplay() |
calls per AppKit event. |
9) The organization of the project sources is now much closer to the original |
distribution which should make it easier to identifier areas where we |
unindentionally differ from the original implementation. |
10) The mouse coordinates passed to the various mouse related callbacks are now |
correctly rounded to integral pixel locations. |
11) Key events with more than a single UTF-16 codepoint would only pass on |
the first codepoint to the GLUT application and drop the others on the |
floor. |
12) No key events would be accepted by a window after it was deminiaturized. |
13) Showing/hiding subwindows wouldn't work correctly. They do now and a hidden |
subwindow will correctly retain its relative position among its siblings |
while hidden even as new siblings are added and others are removed. We do |
this by maintaining a doubly-linked list of subwindows parallel to the |
-subviews array which the AppKit manages. The important difference between |
our list and -subviews is that the former contains all subwindows _including_ |
hidden subwindows while the latter _only_ contains shown subwindows. |
14) Calling glutPostWindowRedisplay() on any subwindow would result in |
superfluous redisplay operations. I.e. invalidating a leave window in |
the window hierarchy would redisplay all ancestors up to the controlling |
top-level window. |
15) Significantly reduced the overhead of a redisplay operation. |
16) glutMouseFunc now supports GLUT_MIDDLE_BUTTON. glutMotionFunc() is now |
correctly called for any mouse button (not only left & right buttons as |
it used to be). |
17) Displaying the Show Clipboard window would not deactivate the current main |
window. It does so now. |
18) Determination of a window's or subwindow's damaged status is now much more |
reliable. |
19) Invoking glutVisibilityFunc() and glutWindowStatusFunc() on the same window |
is now handle the same as it is for the X Windows implementation. |
20) Newly created windows now have a default reshape & display callback as |
required. |
21) glutPassiveMotionFunc() is now handled correctly for multiple subwindows. |
Previously if i.e. two subwindows installed a passive motion function, as |
soon as one of them would call glutPassiveMotionFunc(NULL) no further |
passive motion calls would be generated for _any_ subwindow. |
22) Calling glutWindowStatusFunc(NULL) now correctly resets the current window's |
visibility state to unknown. |
23) No more superfluous calls to a window's reshape callback are done. |
GLUT for Mac OS X Read Me |
=========================== |
This is an improved version of the GLUT that Apple ships with MacOS X v10.1.3. |
The following table lists all changes relative to Apple's version: |
*) Cleaned up project |
*) Fully implemented GLUT game mode and related APIs |
*) Implemented glutSetKeyRepeat() function |
*) Implemented GLUT_DEVICE_KEY_REPEAT selector for glutDeviceGet() |
*) Implemented GLUT_DISPLAY_MODE_POSSIBLE selector for glutGet() |
*) Implemented GLUT_WINDOW_NUM_SAMPLES selector for glutGet() |
*) Implemented GLUT_CURSOR_INHERIT selector for glutSetCursor() |
*) Implemented GLUT_CURSOR_INFO selector for glutSetCursor() |
*) Added support for GLUT_MULTISAMPLE display mode flag and "samples" display |
string keyword |
*) Cleaned up menus |
*) Hide and Quit menu items now automatically show the GLUT application name |
*) User may now copy the contents of the current front window to the clipboard |
via Edit/Copy |
*) User may now invoke a service on the contents of the current front window |
*) User may now inspect the contents of the clipboard via Edit/Show Clipboard |
*) User may now print the contents of the current front window |
*) GLUT application menus are now added to the menu bar according to the Aqua |
Guidelines |
*) Got rid of a few memory leaks |
*) Miniaturized windows now show a snapshot of the window content area |
(OpenGL graphics) |
If you don't want to support services, copying and saving the contents of the current |
front window in your GLUT application then you may turn this behavior off by supplying |
the "-nograb" option on the command line (or at least the command string you actually |
pass to the glutInit() function). |
If you don't want to support printing in your GLUT application then you may turn it off |
by supplying the "-noprint" option on the CLI. |
Last updated: 2008-02-08