大部分的函数可以根据名称分辨作用:主要是几个大类
已经添加了几个新的回调,并且还没有实现Silicon Graphics硬件特有的几个回调。大多数或所有新回调都列在GLUT版本4的"GLUT.h"头文件中,但没有出现在文档中。新回调包括常规和特殊键释放回调、操纵杆回调、菜单状态回调(有一个参数,与有三个参数的菜单状态回调不同)、窗口状态回调(也有一个变量)和窗口位置回调。不支持的回调是两个Tablet回调。如果用户需要不受支持的回调,他应该联系freeglut开发团队。
添加了新的函数来呈现完整的字符串(包括回车),而不是一次呈现一个字符。更多的函数返回字符串的宽度和字体高度,位图字体以像素为单位,笔划字体以OpenGL为单位。
添加了两个功能来渲染线框和实心菱形十二面体。此外,著名的纽厄尔茶壶附带的原装茶杯和茶匙的实体和线框版本。由于这些几何函数经常用于教学目的,因此现在可以使用glutSetOption(GLUT_geometry_VISUALIZE_NORMALS,true/false)来可视化每个顶点的法向量。最后,为了支持使用着色器绘制这些对象,添加了三个函数,用户可以通过这些函数提供"坐标"、"法线"和"纹理坐标"顶点属性的地址:glutSetVertexAttribCoord3、glutSetVerexAttripNormal和glutSetVitexAttritTexCoord2。纹理坐标仅为摘要生成。
Initialization Functions
glutInit
glutInitWindowPosition
glutInitWindowSize
glutInitWindowPosition和glutInitTindowSize函数为freeglut将来创建的窗口指定所需的位置和大小。
glutInitDisplayMode
glutInitDisplayString
glutInitErrorFunc
glutInitWarningFunc
Event Processing Functions
glutMainLoop:glutMainLoop函数进入事件循环。
glutMainLoopEvent:glutMainLoopEvent函数处理freeglut事件循环中的单个迭代。
glutLeaveMainLoop:glutLeaveMainLoop函数导致freeglut停止其事件循环。
Window Functions
glutCreateWindow
glutCreateSubwindow
glutDestroyWindow
glutSetWindow
glutGetWindow
glutSetWindowTitle
glutSetIconTitle
glutReshapeWindow
glutPositionWindow
glutShowWindow
glutHideWindow
glutIconifyWindow
glutPushWindow
glutPopWindow
glutFullScreen
glutLeaveFullScreen
glutFullScreenToggle
Display Functions
glutPostRedisplay
glutPostWindowRedisplay
glutSwapBuffers
Mouse Cursor Functions
glutSetCursor
glutWarpPointer
Overlay Functions
glutEstablishOverlay
glutRemoveOverlay
glutUseLayer
glutPostOverlayRedisplay
glutPostWindowOverlayRedisplay
glutShowOverlay,
glutHideOverlay
Menu Functions
glutCreateMenu
glutDestroyMenu
glutGetMenu
glutSetMenu
glutAddMenuEntry
glutAddSubMenu
glutChangeToMenuEntry
glutChangeToSubMenu
glutSetMenuFont
glutRemoveMenuItem
glutAttachMenu
glutDetachMenu
glutMenuDestroyFunc
Global Callback Registration Functions
回调函数设置
glutTimerFunc
glutIdleFunc
glutMenuStatusFunc
glutMenuStateFunc
Window-Specific Callback Registration Functions
回调函数设置
glutDisplayFunc
glutOverlayDisplayFunc
glutReshapeFunc
glutPositionFunc
glutCloseFunc
glutKeyboardFunc
glutSpecialFunc
glutKeyboardUpFunc
glutSpecialUpFunc
glutMotionFunc
glutPassiveMotionFunc
glutMouseFunc
glutMouseWheelFunc
glutEntryFunc
glutJoystickFunc
glutSpaceballMotionFunc
glutSpaceballRotateFunc
glutSpaceballButtonFunc
glutButtonBoxFunc
glutDialsFunc
glutTabletMotionFunc
glutTabletButtonFunc
glutVisibilityFunc
glutWindowStatusFunc
State Setting and Retrieval Functions
glutSetOption:允许您设置一些常规状态/选项变量。
glutGet:可以使用glutGet查询以下状态变量。返回的值是一个整数。
glutDeviceGet
glutGetModifiers
glutLayerGet
glutExtensionSupported
glutGetProcAddress:glutGetProcAddress返回一个指向命名GL或freeglut函数的指针。
Font Rendering Functions
freeglut支持两种类型的字体渲染:使用glBitmap函数调用渲染的位图字体和渲染为OpenGL线段序列的笔划字体。因为它们被渲染为位图,所以位图字体往往比笔划字体渲染得更快,但在缩放和渲染方面灵活性较差。位图字体字符通过调用glRasterPos*函数来定位,而笔划字体字符则使用OpenGL转换来定位字符。
需要注意的是,freeglut字体与GLUT字体相似,但并不完全相同。目前,freeglut字体不支持"`"(后引号)和"|"(竖线)字符;在它们的位置上,它会显示星号。
freeglut支持以下位图字体:
GLUT_BITMAP_8_BY_13-可变宽度字体,每个字符都适合13像素高、最多8像素宽的矩形。
GLUT_BITMAP_9_BY_15-可变宽度字体,每个字符都适合15像素高、最多9像素宽的矩形。
GLUT_BITMAP_TIMES_ROMAN_10-10点可变宽度TIMES ROMAN字体。
GLUT_BITMAP_TIMES_ROMAN_24-一种24点可变宽度的TIMES ROMAN字体。
GLUT_BITMAP_HELVETICA_10-一种10点可变宽度的HELVETICA字体。
GLUT_BITMAP_HELVETICA_12-一种12点可变宽度的HELVETICA字体。
GLUT_BITMAP_HELVETICA_18-一种18点可变宽度的HELVETICA字体。
freeglut调用glRasterPos4v将光标前移一个字符的宽度,并在适当的时候渲染回车。它不使用任何显示列表以位图字体进行渲染。
freeglut支持以下笔划字体:GLUT_STROKE_ROMAN-按比例分隔的罗马单工字体;
GLUT_STROKE_MONO_ROMAN-固定宽度的罗马单工字体
freeglut在绘制笔划字体时不使用任何显示列表。它调用glTranslatef将光标前移一个字符的宽度,并在适当的时候呈现回车。
glutBitmapCharacter:glutBitmapCharacter函数使用指定的字体在当前窗口中渲染单个位图字符。
glutBitmapString
glutBitmapWidth
glutBitmapLength
glutBitmapHeight
glutStrokeCharacter
glutStrokeString
glutStrokeWidth
glutStrokeWidthf
glutStrokeLength
glutStrokeLengthf
glutStrokeHeight
Geometric Object Rendering Functions
freeglut包含22个例程,用于生成易于识别的三维几何对象。这些例程实际上与GLUT库中包含的例程相同,并反映了OpenGL程序员指南中描述的辅助工具包中可用的功能。它们允许程序员用一行代码创建一个三维对象,该对象可用于测试OpenGL的各种功能。没有一个例程为它绘制的对象生成显示列表。这些函数生成适用于照明的法线,但除茶壶函数外,不生成纹理坐标。请注意,应启用深度测试(GL_LESS)以正确绘制非凸对象,即glutTorus、glutSierpinskiPonge、glutTeapot、glutTaicup和glutTeaspoon。
另请参阅可以使用glutSetOption设置的GLUT_GEOMETRY_VISUALIZE_NORMALS选项。最后,如果要将这些对象与着色器一起使用,请参见glutSetVertexAttribCoord3、glutSetVitexAttrifNormal和glutSetVerexAttripTexCoord2。
glutWireSphere, glutSolidSphere分别绘制线框和实体球体。
glutWireTorus, glutSolidTorus分别绘制线框和实心圆环(圆环形状)。
glutWireCone, glutSolidCone分别绘制线框和实体圆锥体。
glutWireCube, glutSolidCube分别绘制线框和实心立方体。
glutWireTetrahedron, glutSolidTetrahedron分别绘制线框和实体四面体(四边柏拉图实体)。
glutWireOctahedron, glutSolidOctahedron分别绘制线框和实体八面体(八面柏拉图体)。
glutWireDodecahedron, glutSolidDodecahedron分别绘制线框和实心十二面体(十二面柏拉图体)。
glutWireIcosahedron, glutSolidIcosahedron分别绘制线框和实体二十面体(二十面柏拉图体)。
glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron分别绘制线框和实心菱形十二面体(十二面半规则实心)。
glutWireTeapot和glutSolidTeapot函数分别绘制线框和实心茶壶,glutWireTeacup和glutSulidTeacup函数分别绘制一个线框和一个实心茶壶,glutWireTeaspoon和glutSsolidteaspoon函数分别绘制了一个线框图和一个实体茶壶。
glutSetVertexAttribCoord3, glutSetVertexAttribNormal, glutSetVertexAttribTexCoord2。
要使用着色器(OpenGL 2及更高版本)绘制形状,需要将顶点和相关的法线向量以及纹理坐标上载到着色器的顶点属性。在调用上述几何体函数之前,使用这些函数可以设置当前活动着色器中顶点属性的索引(地址),freeglut将在那里上载对象几何体。纹理坐标仅为茶壶、茶杯和茶匙生成。
Game Mode Functions
glutGameModeString:指定进入GameMode时应进入的显示模式。默认为显示器的当前显示模式,GameMode屏幕将在该显示器上打开。
glutEnterGameMode
glutLeaveGameMode
glutGameModeGet
Video Resize Functions
这些函数不是在freeglut中实现的。
glutVideoResizeGet
glutSetupVideoResizing
glutStopVideoResizing
glutVideoResize
glutVideoPan
Color Map Functions
glutSetColor
glutGetColor
glutCopyColormap
MultiTouch Functions
MultiTouch回调用于处理具有多个输入的环境,例如多点触摸屏、多点触摸板或多个鼠标。
glutMultiEntryFunc ← id, GLUT_ENTERED|GLUT_LEFT
glutMultiButtonFunc ← id, x, y, button, GLUT_DOWN|GLUT_UP
glutMultiMotionFunc ← id, x, y
glutMultiPassiveFunc ← id, x, y
这些函数的工作方式与其非多重变体类似,带有一个额外的"deviceid"参数来描述当前输入设备(鼠标或手指)。
异常:在MultiButtonFunc中,回调参数的顺序不同(x,y,button,state而不是button,state,x,y)。
目前,在X11下,非多回调变体也会在X11上为每个事件调用。
目前,在窗口下,第一个(最古老的)触摸点也控制鼠标光标,这会像往常一样触发非多重回调。
所有这些函数都具有用户数据回调函数。
限制:当前提供的游标id。在以下情况下,可能还需要获取设备id:
当鼠标指针或触摸板正在执行不相关的动作,而不是触摸屏手势的一部分(在某些平台上可能不可能)时,支持双指手势,如捏以缩放触摸屏。
避免Android上触摸屏和触摸板/游戏板之间的触摸id冲突;一种可能的解决方案是在触摸id中移动设备id。
由于这种额外的支持是以额外的复杂性为代价的,我们正在考虑是否/如何实现它。
Mobile functions
添加了这些新回调:
glutInitContextFunc←void:当上下文初始化或重新初始化时(例如,在暂停后)调用。具有用户数据回调功能。
glutAppStatusFunc←eevent:当应用程序的状态更改时调用,事件标识输入的状态。具有用户数据回调功能。可能的状态:
应用程序暂停(或停止)→GGLUT_APPSTATUS_PAUSE
应用程序暂停后返回→GGLUT_APPSTATUS_RESUME。在glutInitContextFunc回调之后调用。
支持的移动平台
安卓系统的支持在安卓页面上有进一步的描述。
BlackBerry 10/BlackBerry PlayBook
glutInitContextFunc ← void
glutAppStatusFunc ← event
Miscellaneous Functions
glutSetKeyRepeat和glutIgnoreKeyRepeat函数设置是否将重复按键(通过按住键生成)传递给键盘回调。glutSetKeyRepeat允许全局关闭键重复,而glutIgnoreKeyRepeats则在每个窗口的基础上控制这种行为。
glutSetKeyRepeat
glutIgnoreKeyRepeat
glutForceJoystickFunc
glutReportErrors