OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等組件的關係

來源:互聯網
上載者:User

標籤:

OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等組件的關係

一、OpenGL

OpenGL函數庫相關的API有核心庫(gl),實用庫(glu),輔助庫(aux)、工具 + 生產力庫(glut),視窗庫(glx、agl、wgl)和擴充函數庫等。

gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同視窗系統的函數。glut是為跨平台的OpenGL程式的工具包,比aux功能強大(aux很大程度上已經被glut庫取代。)。擴充函數庫是硬體廠商為實現硬體更新利用OpenGL的擴充機制開發的函數。

OpenGL的競爭者是Direct3D;OpenGL對應的開源實現是mesa 3D。

二、glut:OpenGL工具庫 OpenGL Utility Toolkit

這部分函數以glut開頭,主要包括視窗操作函數,視窗初始化、視窗大小、視窗位置等函數;回呼函數:響應重新整理訊息、鍵盤訊息、滑鼠訊息、定時器函數等;建立複雜的三維物體;菜單函數;程式運行函數。

gult對應的開源實現是freegult。

三、視窗庫GLX

對於X視窗系統,它所使用的的OpenGL擴充(GLX:OpenGL extension for X.)是作為OpenGL的一個附件提供的,所有的GLX函數都使用首碼glX。

apl、wgl分別用於apple、windows。

四、glew

GLUT或者FREEGLUT主要是1.0的基本函數功能;GLEW是使用OPENGL2.0之後的一個工具函數。

不同的顯卡公司,也會發布一些只有自家顯卡才支 持的擴充函數,你要想用這數涵數,不得不去尋找最新的glext.h,有了GLEW擴充庫,你就再也不用為找不到函數的介面而煩惱,因為GLEW能自動識別你的平台所支援的全部OpenGL進階擴充函數。也就是說,只要包含一個glew.h標頭檔,你就能使用gl,glu,glext,wgl,glx的全部函數。

五、glfw

GLFW無愧於其號稱的lightweight的OpenGL架構,的確是除了跨平台必要做的事情都沒有做,所以一個標頭檔,很少量的API,就完成了任務。GLFW的開發目的是用於替代glut的,從代碼和功能上來看,我想它已經完全的完成了任務。

一個輕量級的,開源的,跨平台的library。支援OpenGL及OpenGL ES,用來管理視窗,讀取輸入,處理事件等。因為OpenGL沒有視窗管理的功能,所以很多熱心的人寫了工具來支援這些功能,比如早期的glut,現在的freeglut等。那麼GLFW有何優勢呢?glut太老了,最後一個版本還是90年代的。freeglut完全相容glut,算是glut的代替品,功能齊全,但是bug太多。穩定性也不好(不是我說的啊),GLFW應運而生。

六、層次關係

aux->glut->freeglut->glfw

glew

glu 

-------------------------------------------
opengl1.0 glx/apl/wgl 

opengl2.0及以上

--------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------第二篇參考文獻-----------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------

GLEW是一個跨平台的C++擴充庫,基於OpenGL圖形介面。使用OpenGL的朋友都知道,window目前只支援OpenGL1.1的涵數,但 OpenGL現在都發展到2.0以上了,要使用這些OpenGL的進階特性,就必須下載最新的擴充,另外,不同的顯卡公司,也會發布一些只有自家顯卡才支 持的擴充函數,你要想用這數涵數,不得不去尋找最新的glext.h,有了GLEW擴充庫,你就再也不用為找不到函數的介面而煩惱,因為GLEW能自動識 別你的平台所支援的全部OpenGL進階擴充涵數。也就是說,只要包含一個glew.h標頭檔,你就能使用gl,glu,glext,wgl,glx的全 部函數。GLEW支援目前流行的各種作業系統(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。


項目首頁: http://glew.sourceforge.net/ 
文檔地址: http://glew.sourceforge.net/install.html 
: https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-src.zip

 

glu是實用庫,包含有43個函數,函數名的首碼為glu。Glu 為了減輕繁重的編程工作,封裝了OpenGL函數,Glu函數通過調用核心庫的函數,為開發人員提供相對簡單的用法,實現一些較為複雜的操作。
glaux是OpenGL輔助庫,包含有31個函數,函數名首碼為aux。這部分函數提供視窗管理、輸入輸出處理以及繪製一些簡單三維物體。
glut是工具 + 生產力庫,基本上是用於做視窗介面的,並且是跨平台(所以有時你喜歡做簡單的demo的話,可以光用glut就ok了)

 

GLX:OpenGL extension for X.

對於X視窗系統,它所使用的的OpenGL擴充(GLX)是作為OpenGL的一個附件提供的,所有的GLX函數都使用首碼glX。

 

 

常見的OpenGL標頭檔如下:(Windows系統中可以忽略大小寫區別,我自己也沒太注意大小寫。同時,檔案的路徑可能變化,例如不是<GL/gl.h>而是"gl.h",具體情況要看你到底把標頭檔放到哪了)

<GL/gl.h>:OpenGL所使用的函數和常量聲明。

<GL/glu.h>:GLU(OpenGL實用庫)所使用的函數和常量聲明。GLU庫屬於OpenGL標準的一部分。(以下各種庫則不屬於)

<GL/glaux.h>:GLAUX(OpenGL輔助庫)所使用的函數和常量聲明。這個庫提供了建立視窗,處理鍵盤和滑鼠事件,設定調色盤等OpenGL本身不提供,但在編寫OpenGL程式時又經常用到的功能。目前這個庫已經過時,只有比較少的編譯環境中有提供,例如VC系列。在VC系列編譯器中,使用這個標頭檔之前必須使用#include <windows.h>或者具有類似功能的標頭檔。

<GL/glut.h>:GLUT(OpenGL工具 + 生產力包)所使用的函數和常量聲明。這個庫的功能大致與GLAUX類似,目前許多OpenGL教程使用這個庫來編寫示範程式。一些編譯系統可能不直接提供這個庫(例如VC系列),需要單獨下載安裝。這個標頭檔自動包含了<GL/gl.h>和<GL/glu.h>,編程時不必再次包含它們。

<GL/glext.h>:擴充標頭檔。因為微軟公司對OpenGL的支援不太積極,VC系列編譯器雖然有<GL/gl.h>這個標頭檔,但是裡面只有OpenGL 1.1版本中所規定的內容,而沒有OpenGL 1.2及其以後版本。對當前的電腦配置而言,幾乎都支援OpenGL 1.4版本,更高的則到1.5, 2.0, 2.1,而VC無法直接使用這些功能。為瞭解決這一問題,就有了<GL/glext.h>標頭檔。這個標頭檔提供了高版本OpenGL所需要的各種常數聲明以及函數指標聲明。

<GL/wglext.h>:擴充標頭檔。與<GL/glext.h>類似,但這個標頭檔中只提供適用於Windows系統的各種OpenGL擴充所使用的函數和常量,不適用於其它作業系統。

"glee.h":GLEE開源庫的標頭檔。它的出現是因為<GL/glext.h>雖然可以使用高版本的OpenGL函數,但是使用的形式不太方便。GLEE庫則讓高版本的OpenGL函數與其它OpenGL函數在使用上同樣方便。需要注意的是,這個標頭檔與<GL/gl.h>是衝突的,在包含"glee.h"之前,不應該包含<GL/gl.h>。
#include <GL/glut.h>
#include "glee.h"   // 錯誤,因為glut.h中含有gl.h,它與glee.h衝突
                    // 但是如果把兩個include順序交換,則正確
"glos.h":雖然這個也時常見到,但我也不知道它到底是什麼,可能是與系統相關的各種功能,也可能只是自己編寫的一個檔案。我曾經看到一個glos.h標頭檔中只有一句#include <GL/glut.h>。

原文連結:glut glew區別

OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等組件的關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.