OpenGL之gult/freeglut/glew/glfw/glad的聯繫與區別

本篇內容主要參考了文章:https://blog.csdn.net/AvatarForTest/article/details/79199807,但是經過本人局部修改,並添加了個人見解。

 

1.OpenGL總覽

OpenGL只有框架沒有實現,換句話說就是OpenGL只有函數聲明沒有源文件實現,類似於接口和虛函數。所有的實現是顯卡生產商提供。比如NVIDIA或者AMD就要自己實現OpenGL函數內容,所以不同的生產商可以對自己的產品提供優化,畢竟代碼是自己寫的。

OpenGL函數庫相關的API有核心庫(gl),實用庫(glu),輔助庫(aux)、實用工具庫(glut),窗口庫(glx、agl、wgl)和擴展函數庫等。gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同窗口系統的函數。glut是爲跨平臺的OpenGL程序的工具包,比aux功能強大(aux很大程度上已經被glut庫取代)。擴展函數庫是硬件廠商爲實現硬件更新利用OpenGL的擴展機制開發的函數。

https://opengl.org/

 

 

2.gult

OpenGL Utility Toolkit

https://www.opengl.org/resources/libraries/glut/glut_downloads.php

裏面有32位的庫文件下載,glutdlls37beta.zip,但是版本太老了,理應被時代淘汰,不推薦使用。gult最後版本v3.7beta的歷史可追溯至1998年8月,且該項目已經被廢棄。它的許可證禁止任何人發佈修改後的庫代碼。

這部分函數以glut開頭,主要包括窗口操作函數,窗口初始化、窗口大小、窗口位置等函數;回調函數:響應刷新消息、鍵盤消息、鼠標消息、定時器函數等;創建複雜的三維物體;菜單函數;程序運行函數。gult對應的開源實現是freegult。

 

 

3.freeglut

FreeGLUT is a free-software/open-source alternative to the OpenGL Utility Toolkit (GLUT) library

因爲OpenGL沒有窗口管理的功能,所以很多熱心的人寫了工具來支持這些功能,比如早期的glut,現在的freeglut等。

freeglut完全兼容glut,是glut的代替品,開源,功能齊全。目前來看,freeglut 3.0版本比其它版本穩定,推薦使用。帕維爾在1999年12月1日開始freeglut的開發。目前,該項目幾乎可以100%的替代原來的GLUT,只有少數差別(如,the abandonment of SGI-specific features,按鈕盒子和動態視頻分辨率)和 其他一小部分程序Bug。

http://freeglut.sourceforge.net/

 

 

4.glew

The OpenGL Extension Wrangler Library

glut或者freegult主要是OpenGL 1.0的基本函數功能;glew是使用OpenGL 2.0之後的一個工具函數。

不同的顯卡公司,也會發布一些只有自家顯卡才支持的擴展函數,你要想用這數涵數,不得不去尋找最新的glext.h,有了GLEW擴展庫,你就再也不用爲找不到函數的接口而煩惱,因爲GLEW能自動識別你的平臺所支持的全部OpenGL高級擴展函數。也就是說,只要包含一個glew.h頭文件,你就能使用gl,glu,glext,wgl,glx的全部函數。

glew包含了OpenGL所需的核心。前面已經說過openGL的實現是顯卡生產商,那麼系統如何才能找到這些實現好的函數呢?而且不同的平臺函數存放地方還不同,文件結構也不同。有沒有一種方式能夠自動找到OpenGL的函數?這就是glew的作用:用來找openGL的函數,並初始化,這樣我們就能直接調用OpenGL的函數了。
http://glew.sourceforge.net/

 

 

5.glfw

glfw is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contexts and surfaces, receiving input and events.

glfw無愧於其號稱的lightweight的OpenGL框架,的確是除了跨平臺必要做的事情都沒有做,所以一個頭文件,很少量的API,就完成了任務。glfw的開發目的是用於替代glut的。它是一個輕量級的,開源的,跨平臺的library。支持OpenGL及OpenGL ES,用來管理窗口,讀取輸入,處理事件等。

那麼glfw有何優勢呢?glut太老了,最後一個版本還是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齊全,但是bug太多。穩定性也不好(不是我說的啊),glfw應運而生。

總之,glfw是glut/freegult的升級和改進。glfw是用來顯示窗口和捕捉窗口事件的一套API,可以理解成Qt和windows平臺的WPF。OpenGL只是一套控制GPU的規則,並沒有對於跨平臺窗口顯示和事件進行規定,所以需要一個顯示顯卡渲染的窗口,這就是glfw的作用。

https://www.glfw.org/

 

 

6.glad

Multi-Language GL/GLES/EGL/GLX/WGL Loader-Generator

glad是繼gl3w,glew之後,當前最新的用來訪問OpenGL規範接口的第三方庫。簡單說glad是glew的升級版,就是說glew比較老,glad比較新。

https://glad.dav1d.de/

 

 

7.結論與項目使用

  • 窗口管理

老產品:glut/freeglut
替代品:glfw

  • 函數加載

老產品:glew
替代品:glad

  • 項目開發,通常有三種組合

(1)freeglut+glew

(2)glfw+glew

(3)glfw+glad

其中組合1是經典,組合3比較新潮。

 

 

x1.源碼和庫下載

請訪問我的另一篇博文:

https://libaineu2004.blog.csdn.net/article/details/105308235

 

 

x2.參考文獻

學習教程

https://learnopengl-cn.github.io/

OpenGL超級寶典visual studio 2013開發環境配置 GLTools

http://www.it165.net/pro/html/201504/38164.html

OpenGL+VS2017 環境配置(親測好使)

https://blog.csdn.net/AvatarForTest/article/details/79199807

《OpenGL編程指南》紅寶書,Khronos小組編寫的OpenGL官方權威指南

《OpenGL超級寶典》藍寶書,配套源碼使用的是freeglut+glew

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章