计算机科学

首页 > 计算机科学

GLUT

2018-08-31 10:21:15     所属分类:应用程序接口

GLUT(英文全写:OpenGL Utility Toolkit)是一个处理OpenGL程式的工具库,负责处理和底层操作系统的呼叫以及I/O,并包括了以下常见的功能:

  • 定义以及控制视窗
  • 侦测并处理键盘及鼠标的事件
  • 以一个函数呼叫绘制某些常用的立体图形,例如长方体、球、以及犹他茶壶(实心或只有骨架,如glutWireTeapot()
  • 提供了简单选单列的实现

GLUT是由Mark J. Kilgard在Silicon Graphics工作时所写,此人同时也是OpenGL Programming for the X Window System以及The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics两书的作者。

GLUT的两个主要目的是建立一个跨平台的函式库(事实上GLUT就是跨平台的),以及简化学习OpenGL的条件。透过GLUT编写OpenGL通常只需要增加几行额外GLUT的程式码,而且不需要知道每个不同操作系统处理视窗的API。

所有的GLUT函数都以glut作为开头,例如glutPostRedisplay()

目录

  • 1 实现
  • 2 原始版本的使用限制
  • 3 参见
  • 4 外部链接

实现

最早的GLUT函式库是由Mark Kilgard所提供的GLX,能够支援X Window System,随后被Nate Robins移植到了Microsoft Windows上(WGL)。除此之外,Mac OS X亦提供了一个NSGL/CGL的界面支援了其自身产品的架构。

由于Kilgard's的GLUT函式库已经不再被维护,且其授权亦不允许对其函式库的再发布或是做出改版。程序员开始意识到必须重新制作一个开放源代码的应用程序界面。于是第一个开源的OpenGL API:freeglut,以尽可能地保留原本界面的方式实现,并添加一些新的函数以解决原始版本的使用限制。例如OpenGLUT,freeglut的其中一个分支,相较于原版本增加了一些新的功能,但在2005年5月已停止其开发。

原始版本的使用限制

原始版本的GLUT让程序员难以实现某些功能,于是出现了许多非官方的扩充1,而在某些版本的API的实现方式中也都或多或少解决了这些问题。

以下列出数种原版GLUT中常见的问题以及解决方法:

  • 原先的GLUT需要使用者呼叫一个不会退回的glutMainLoop()来使相关函数开始运作。这程序员让难以将其整合到其他函数中或是自行选用其他的事件循环。常见的作法是引入一个名为glutCheckLoop()的函数,这个函数只会执行一次glutMainLoop()的循环。另一个常见的方法是使用多个执行绪,并将glutMainLoop()放在一个单独的执行绪中,但是这个作法会引起同步的问题,并且随著作业系统会有不同的实现方式。此外Mac OS X的GLUT更规定glutMainLoop()必须以主执行绪执行。
  • 原先的glutMainLoop()会将执行绪抢走,直到glutMainLoop()自行退出,因此程序员没有一个方法可以借由呼叫函数来直接结束程式,freeglut则借由引入glutLeaveMainLoop()来解决这个问题。
  • 承上,原先的glutMainLoop()当视窗被关掉时就就马上结束执行,使得程序员不能定义离开程式时的行为,于是许多的API并再引入另一个函数glutWMCloseFunc()可以定义程式执行结束时的所需的动作。

由于原始版本的GLUT已经被开放源代码的freeglut所取代,所以以上的问题在最原始版本的GLUT一直没有被解决。

参见

  • GLU
  • OpenGL User Interface Library英语OpenGL User Interface Library(GLUI)
  • freeglut
  • Simple DirectMedia Layer(SDL)
  • GLFW

外部链接

  • GLUT - The OpenGL Utility Toolkit
  • GLUT documentation
  • OpenGLUT
  • FreeGLUT
  • GLUT Tutorial for C/C++
  • Glut tutorial with many lessons(Very in-depth)for C
  • List of OpenGL functions for Windows (GL and GLU, not GLUT)
  • GLUT for WIN32(found from ARToolKit readme)
  • GLUT Packages for Dev C++ users
  • GLUT Installation for Dev C++ [失效链接]
  • GLUT Installation for Dev C++ [失效链接]

上一篇:科纳斯组织
下一篇:Adobe AIR
相关推荐