複製鏈接
請複製以下鏈接發送給好友

GLUT

(處理OpenGL程式的工具庫)

鎖定
GLUT(英文全寫:OpenGL Utility Toolkit)是一個處理OpenGL程式的工具庫,負責處理和底層操作系統的呼叫以及I/O
外文名
GLUT
英文全稱
OpenGL Utility Toolkit
提出者
Mark Kilgard
領    域
計算機
類    型
軟件包

GLUT簡介

GLUT代表OpenGL應用工具包,英文全稱為OpenGL Utility Toolkit,是一個和窗口系統無關的軟件包,它由Mark Kilgard在SGI時寫的。作為AUX庫的功能更強大的替代品,用於隱藏不同窗口系統API的複雜性。
GLUT是專為構建中小型OpenGL程序。雖然GLUT是適合學習OpenGL和開發簡單的OpenGL應用程序。GLUT並不是一個功能全面的工具包所以大型應用程序需要複雜的用户界面最好使用本機窗口系統工具包。所以GLUT是簡單的、容易的、小的。
GLUT中有C,C + +(C一樣),FORTRAN和Ada編程綁定。GLUT的源代碼分佈是移植到幾乎所有的OpenGL實現和平台。目前最新版本為3.7 。 [1] 

GLUT功能

GLUT包括了以下常見的功能:
定義以及控制視窗偵測並處理鍵盤及鼠標的事件以一個函數呼叫繪製某些常用的立體圖形,例如長方體、球、以及猶他茶壺(實心或只有骨架,如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] 

GLUT實現

最早的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月已停止其開發。 [1] 

GLUT原始版本的使用限制

原始版本的GLUT讓程序員難以實現某些功能,於是出現了許多非官方的擴充[1],而在某些版本的API的實現方式中也都或多或少解決了這些問題。
以下列出數種原版GLUT中常見的問題以及解決方法:
  • 原先的GLUT需要使用者呼叫一個不會退回的glutMainLoop()來使相關函數開始運作。這程序員讓難以將其整合到其他函數中或是自行選用其他的事件循環。常見的作法是引入一個名為glutCheckLoop()的函數,這個函數只會執行一次glutMainLoop()的循環。另一個常見的方法是使用多個執行緒,並將glutMainLoop()放在一個單獨的執行緒中,但是這個作法會引起同步的問題,並且隨著作業系統會有不同的實現方式。此外Mac OS X的GLUT更規定glutMainLoop()必須以主執行緒執行。
  • 原先的glutMainLoop()會將執行緒搶走,直到glutMainLoop()自行退出,因此程序員沒有一個方法可以藉由呼叫函數來直接結束程式,freeglut則藉由引入glutLeaveMainLoop()來解決這個問題。
  • 承上,原先的glutMainLoop()當視窗被關掉時就就馬上結束執行,使得程序員不能定義離開程式時的行為,於是許多的API並再引入另一個函數glutWMCloseFunc()可以定義程式執行結束時的所需的動作。
由於原始版本的GLUT已經被開放源代碼freeglut所取代,所以以上的問題在最原始版本的GLUT一直沒有被解決。 [2] 
參考資料
  • 1.    List of OpenGL functions for Windows (GL and GLU, not GLUT)
  • 2.    The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3 (official documentation)