42
49
! CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
52
! Under windows, we have to differentiate between static and dynamic libraries
53
! Discussion by FreeGLUT developers suggests that
54
! Visual C++ specific code involving pragmas may
55
! need to move to a separate header. 24th Dec 2003
57
! pragmas or to 1 to exclude library pragmas.
58
! The default behavior depends on the compiler/platform.
61
! Windows static library
65
! Windows shared library (DLL)
71
! Drag in other Windows libraries as required by FreeGLUT
45
74
! Non-Windows definition of FGAPI and FGAPIENTRY
47
77
! The freeglut and GLUT API versions
48
78
INTEGER(GLenum), PARAMETER, PUBLIC :: FREEGLUT = 1
49
79
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_API_VERSION = 4
50
80
INTEGER(GLenum), PARAMETER, PUBLIC :: FREEGLUT_VERSION_2_0 = 1
51
81
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_XLIB_IMPLEMENTATION = 13
83
! Always include OpenGL and GLU headers
53
85
! GLUT API macro definitions -- the special key codes:
54
86
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_KEY_F1 = z'0001'
55
87
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_KEY_F2 = z'0002'
152
181
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_INIT_DISPLAY_MODE = z'01F8'
153
182
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_ELAPSED_TIME = z'02BC'
154
183
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_WINDOW_FORMAT_ID = z'007B'
155
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_INIT_STATE = z'007C'
157
185
! GLUT API macro definitions -- the glutDeviceGet parameters
158
186
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_HAS_KEYBOARD = z'0258'
629
657
SUBROUTINE glutChangeToMenuEntry(item, label, value) BIND(C,NAME="glutChangeToMenuEntry")
631
! CHARACTER, INTENT(IN) :: label
659
! CHARACTER(C_CHAR), INTENT(IN) :: label
632
660
CHARACTER(C_CHAR), DIMENSION(*), INTENT(IN) :: label
633
661
INTEGER(GLint), VALUE :: item, value
634
662
END SUBROUTINE glutChangeToMenuEntry
640
668
SUBROUTINE glutChangeToSubMenu(item, label, value) BIND(C,NAME="glutChangeToSubMenu")
642
! CHARACTER, INTENT(IN) :: label
670
! CHARACTER(C_CHAR), INTENT(IN) :: label
643
671
CHARACTER(C_CHAR), DIMENSION(*), INTENT(IN) :: label
644
672
INTEGER(GLint), VALUE :: item, value
645
673
END SUBROUTINE glutChangeToSubMenu
1478
! Win32 has an annoying issue where there are multiple C run-time
1479
! libraries (CRTs). If the executable is linked with a different CRT
1480
! from the GLUT DLL, the GLUT DLL will not share the same CRT static
1481
! data seen by the executable. In particular, atexit callbacks registered
1482
! in the executable will not be called if GLUT calls its (different)
1483
! exit routine). GLUT is typically built with the
1484
! "/MD" option (the CRT with multithreading DLL support), but the Visual
1485
! C++ linker default is "/ML" (the single threaded CRT).
1487
! One workaround to this issue is requiring users to always link with
1488
! the same CRT as GLUT is compiled with. That requires users supply a
1489
! non-standard option. GLUT 3.7 has its own built-in workaround where
1490
! the executable's "exit" function pointer is covertly passed to GLUT.
1491
! GLUT then calls the executable's exit function pointer to ensure that
1492
! any "atexit" calls registered by the application are called if GLUT
1495
! Note that the __glut*WithExit routines should NEVER be called directly.
1497
! to get the prototype for exit()
1499
! void __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int))
1500
PUBLIC __glutInitWithExit
1502
SUBROUTINE __glutInitWithExit(argcp, argv, exitfunc) BIND(C,NAME="__glutInitWithExit")
1504
! INTEGER(GLint), DIMENSION(*) :: argcp
1505
INTEGER(GLint) :: argcp
1506
TYPE(C_PTR), INTENT(IN) :: argv
1507
! void exitfunc(int)
1509
SUBROUTINE exitfunc(arg1) BIND(C)
1511
INTEGER(GLint), VALUE :: arg1
1512
END SUBROUTINE exitfunc
1514
END SUBROUTINE __glutInitWithExit
1517
! int __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int))
1518
PUBLIC __glutCreateWindowWithExit
1520
FUNCTION __glutCreateWindowWithExit(title, exitfunc) BIND(C,NAME="__glutCreateWindowWithExit")
1522
INTEGER(GLint) :: __glutCreateWindowWithExit
1523
! CHARACTER(C_CHAR), INTENT(IN) :: title
1524
CHARACTER(C_CHAR), DIMENSION(*), INTENT(IN) :: title
1525
! void exitfunc(int)
1527
SUBROUTINE exitfunc(arg1) BIND(C)
1529
INTEGER(GLint), VALUE :: arg1
1530
END SUBROUTINE exitfunc
1532
END FUNCTION __glutCreateWindowWithExit
1535
! int __glutCreateMenuWithExit(void (* func)(int), void (__cdecl *exitfunc)(int))
1536
PUBLIC __glutCreateMenuWithExit
1538
FUNCTION __glutCreateMenuWithExit(arg1arg2arg3exitfunc) BIND(C,NAME="__glutCreateMenuWithExit")
1540
INTEGER(GLint) :: __glutCreateMenuWithExit
1541
INTEGER(GLint), VALUE :: arg3
1542
! void exitfunc(int)
1544
SUBROUTINE exitfunc(arg1) BIND(C)
1546
INTEGER(GLint), VALUE :: arg1
1547
END SUBROUTINE exitfunc
1549
END FUNCTION __glutCreateMenuWithExit
1552
! ???, , PUBLIC :: FGUNUSED=__attribute__((unused))
1553
INTEGER(GLenum), PARAMETER, PUBLIC :: glutInit = glutInit_ATEXIT_HACK
1554
INTEGER(GLenum), PARAMETER, PUBLIC :: glutCreateWindow = glutCreateWindow_ATEXIT_HACK
1555
INTEGER(GLenum), PARAMETER, PUBLIC :: glutCreateMenu = glutCreateMenu_ATEXIT_HACK
1563
! version: Ubuntu 11.04 Raring: 2.6.0-4ubuntu1
1449
1567
! freeglut_ext.h
1451
1569
! The non-GLUT-compatible extensions to the freeglut library include file
1472
1590
! CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1593
! Additional GLUT Key definitions for the Special key function
1594
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_KEY_NUM_LOCK = z'006D'
1595
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_KEY_BEGIN = z'006E'
1596
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_KEY_DELETE = z'006F'
1475
1598
! GLUT API Extension macro definitions -- behaviour when the user clicks on an "x" to close a window
1476
1599
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_ACTION_EXIT = 0
1477
1600
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_ACTION_GLUTMAINLOOP_RETURNS = 1
1498
1623
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_RENDERING_CONTEXT = z'01FD'
1499
1624
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_DIRECT_RENDERING = z'01FE'
1626
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_FULL_SCREEN = z'01FF'
1501
1628
! New tokens for glutInitDisplayMode.
1502
1629
! Only one GLUT_AUXn bit may be used at a time.
1503
1630
! Value 0x0400 is defined in OpenGLUT.
1631
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_AUX = z'1000'
1504
1633
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_AUX1 = z'1000'
1505
1634
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_AUX2 = z'2000'
1506
1635
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_AUX3 = z'4000'
1507
1636
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_AUX4 = z'8000'
1638
! Context-related flags, see freeglut_state.c
1639
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_INIT_MAJOR_VERSION = z'0200'
1640
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_INIT_MINOR_VERSION = z'0201'
1641
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_INIT_FLAGS = z'0202'
1642
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_INIT_PROFILE = z'0203'
1644
! Flags for glutInitContextFlags, see freeglut_init.c
1645
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_DEBUG = z'0001'
1646
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_FORWARD_COMPATIBLE = z'0002'
1649
! Flags for glutInitContextProfile, see freeglut_init.c
1650
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_CORE_PROFILE = z'0001'
1509
1652
! Process loop function, see freeglut_main.c
1510
1653
! void glutMainLoopEvent( void )
1511
1654
PUBLIC glutMainLoopEvent
1523
1666
END SUBROUTINE glutLeaveMainLoop
1669
! void glutExit ( void )
1672
SUBROUTINE glutExit() BIND(C,NAME="glutExit")
1674
END SUBROUTINE glutExit
1678
! Window management functions, see freeglut_window.c
1679
! void glutFullScreenToggle( void )
1680
PUBLIC glutFullScreenToggle
1682
SUBROUTINE glutFullScreenToggle() BIND(C,NAME="glutFullScreenToggle")
1684
END SUBROUTINE glutFullScreenToggle
1527
1688
! Window-specific callback functions, see freeglut_callbacks.c
1528
1689
! void glutMouseWheelFunc( void (* callback)( int, int, int, int ) )
1590
1751
END SUBROUTINE glutSetOption
1754
! int * glutGetModeValues(GLenum mode, int * size)
1755
PUBLIC glutGetModeValues
1757
FUNCTION glutGetModeValues(mode, size) BIND(C,NAME="glutGetModeValues")
1759
*** int* :: glutGetModeValues
1760
INTEGER(GLenum), VALUE :: mode
1761
! INTEGER(GLint), DIMENSION(*) :: size
1762
INTEGER(GLint) :: size
1763
END FUNCTION glutGetModeValues
1593
1766
! A.Donev: User-data manipulation
1594
1767
! void* glutGetWindowData( void )
1595
1768
PUBLIC glutGetWindowData
1655
1828
SUBROUTINE glutBitmapString(font, string) BIND(C,NAME="glutBitmapString")
1657
1830
! CHARACTER, INTENT(IN) :: string
1658
CHARACTER(C_CHAR), DIMENSION(*), INTENT(IN) :: string
1831
CHARACTER, DIMENSION(*), INTENT(IN) :: string
1659
1832
TYPE(C_PTR), VALUE :: font
1660
1833
END SUBROUTINE glutBitmapString
1666
1839
SUBROUTINE glutStrokeString(font, string) BIND(C,NAME="glutStrokeString")
1668
1841
! CHARACTER, INTENT(IN) :: string
1669
CHARACTER(C_CHAR), DIMENSION(*), INTENT(IN) :: string
1842
CHARACTER, DIMENSION(*), INTENT(IN) :: string
1670
1843
TYPE(C_PTR), VALUE :: font
1671
1844
END SUBROUTINE glutStrokeString
1739
1912
FUNCTION glutGetProcAddress(procName) BIND(C,NAME="glutGetProcAddress")
1741
1914
TYPE(C_FUNPTR) :: glutGetProcAddress
1742
! CHARACTER, INTENT(IN) :: procName
1915
! CHARACTER(C_CHAR), INTENT(IN) :: procName
1743
1916
CHARACTER(C_CHAR), DIMENSION(*), INTENT(IN) :: procName
1744
1917
END FUNCTION glutGetProcAddress
1921
! Joystick functions, see freeglut_joystick.c
1922
! USE OF THESE FUNCTIONS IS DEPRECATED !!!!!
1923
! contact the "freeglut" developer community at freeglut-developer@lists.sourceforge.net,
1924
! switch to the OpenGLUT library, or else port your joystick functionality over to PLIB's
1927
! Initialization functions, see freeglut_init.c
1928
! void glutInitContextVersion( int majorVersion, int minorVersion )
1929
PUBLIC glutInitContextVersion
1931
SUBROUTINE glutInitContextVersion(majorVersion, minorVersion) BIND(C,NAME="glutInitContextVersion")
1933
INTEGER(GLint), VALUE :: majorVersion, minorVersion
1934
END SUBROUTINE glutInitContextVersion
1937
! void glutInitContextFlags( int flags )
1938
PUBLIC glutInitContextFlags
1940
SUBROUTINE glutInitContextFlags(flags) BIND(C,NAME="glutInitContextFlags")
1942
INTEGER(GLint), VALUE :: flags
1943
END SUBROUTINE glutInitContextFlags
1946
! void glutInitContextProfile( int profile )
1947
PUBLIC glutInitContextProfile
1949
SUBROUTINE glutInitContextProfile(profile) BIND(C,NAME="glutInitContextProfile")
1951
INTEGER(GLint), VALUE :: profile
1952
END SUBROUTINE glutInitContextProfile
1956
! GLUT API macro definitions -- the display mode definitions
1957
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_CAPTIONLESS = z'0400'
1958
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_BORDERLESS = z'0800'
1959
INTEGER(GLenum), PARAMETER, PUBLIC :: GLUT_SRGB = z'1000'
1749
1970
! Font variables in GLUT_fonts.c
1750
1971
TYPE(C_PTR), BIND(C), PUBLIC, PROTECTED :: GLUT_STROKE_ROMAN, &