GLUT

GLUT(英文全寫:OpenGL Utility Toolkit)是一個處理OpenGL程式的工具庫,負責處理和底層作業系統的呼叫以及I/O

基本介紹

  • 外文名:GLUT
  • 英文全稱:OpenGL Utility Toolkit
  • 提出者:Mark Kilgard
  • 領域:計算機
簡介,功能,實現,原始版本的使用限制,

簡介

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 。

功能

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()。

實現

最早的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一直沒有被解決。

相關詞條

熱門詞條

聯絡我們