OpenGL使用VS2017和CMake配置GLFW和GLAD

簡(jiǎn)單的介紹

OpenGL

OpenGL(Open Graphics Library,開(kāi)放圖形庫(kù)),一般被認(rèn)為是一個(gè)API(Application Programming Interface,應(yīng)用程序編程接口),包含了一系列可以操作圖形、圖像的函數(shù)。其實(shí),OpenGL本身并不是一個(gè)API,它僅僅是一個(gè)由Khronos組織制定并維護(hù)的規(guī)范(Specification)。OpenGL規(guī)范嚴(yán)格規(guī)定了每個(gè)函數(shù)該如何執(zhí)行,以及它們的輸出值。至于內(nèi)部具體每個(gè)函數(shù)是如何實(shí)現(xiàn)(Implement)的,將由OpenGL庫(kù)的開(kāi)發(fā)者自行決定。

GLFW

在我們使用OpenGL進(jìn)行繪制圖形之前,首先要做的就是創(chuàng)建一個(gè)OpenGL上下文(Context)和一個(gè)用于顯示的窗口。然而,這些操作在每個(gè)系統(tǒng)上都是不一樣的,OpenGL有目的地從這些操作抽象(Abstract)出去。這意味著我們不得不自己處理創(chuàng)建窗口,定義OpenGL上下文以及處理用戶輸入。

GLFW是一個(gè)專門針對(duì)OpenGL的C語(yǔ)言庫(kù),它提供了一些渲染物體所需的最低限度的接口。它允許用戶創(chuàng)建OpenGL上下文,定義窗口參數(shù)以及處理用戶輸入。這也就節(jié)省了我們書寫操作系統(tǒng)相關(guān)代碼的時(shí)間,提供給我們一個(gè)窗口和上下文用來(lái)渲染。

官方網(wǎng)址:https://www.glfw.org/

GLAD

因?yàn)镺penGL只是一個(gè)標(biāo)準(zhǔn)/規(guī)范,具體的實(shí)現(xiàn)是由驅(qū)動(dòng)開(kāi)發(fā)商針對(duì)特定顯卡實(shí)現(xiàn)的。由于OpenGL驅(qū)動(dòng)版本眾多,它大多數(shù)函數(shù)的位置都無(wú)法在編譯時(shí)確定下來(lái),需要在運(yùn)行時(shí)查詢。所以任務(wù)就落在了開(kāi)發(fā)者身上,開(kāi)發(fā)者需要在運(yùn)行時(shí)獲取函數(shù)地址并將其保存在一個(gè)函數(shù)指針中供以后使用。取得地址的方法因平臺(tái)而異,所以非常繁瑣。幸運(yùn)的是,有些庫(kù)能簡(jiǎn)化此過(guò)程,其中GLAD是目前最新,也是最流行的庫(kù),它是一個(gè)開(kāi)源庫(kù),可以在其提供的在線服務(wù)中配置。

CMake

CMake是一個(gè)工程文件生成工具。用戶可以使用預(yù)定義好的CMake腳本,根據(jù)自己的選擇生成不同IDE的工程文件。這也就允許我們從GLFW源碼里創(chuàng)建一個(gè)Visual Studio 2017工程文件,之后進(jìn)行編譯。

官方網(wǎng)址:https://cmake.org/

在Windows下使用VS2017的配置過(guò)程

注:為了給大家提供方便,我已經(jīng)將前幾步整合好的Packages包打包,需要的話可以直接下載:

下載鏈接:https://pan.baidu.com/s/1iwJhRHecTnn6GtVYSewrQg 提取碼:s733

如果你已擁有了這個(gè)包,可以直接跳到“創(chuàng)建一個(gè)工程并將Packages的內(nèi)容引入”一節(jié),如果你想親手經(jīng)理一邊整個(gè)配置過(guò)程,就可以繼續(xù)從頭閱讀下去。

下載GLFW庫(kù)

下載頁(yè)面:https://www.glfw.org/download.html

在下載頁(yè)面,我們下載其源碼,然后使用CMake自己進(jìn)行編譯,以獲得Visual Studio 2017可用的工程文件。

下載GLFW

下載后解壓得到的文件如下:

GLFW解壓文件

下載CMake

下載頁(yè)面:https://cmake.org/download/

這里下載的是3.13.3版本的Windows64位安裝包:

下載CMake

使用CMake和VS2017生成解決方案

下載完成后正常安裝,并且打開(kāi)已經(jīng)安裝成功的CMake。這里我們可以選擇用GUI打開(kāi)或者通過(guò)Command Line使用,為了簡(jiǎn)單直觀,使用GUI來(lái)運(yùn)行CMake。

將源代碼一欄定位到剛剛下載好的GLFW源碼文件夾下,然后選擇一個(gè)生成的目標(biāo)文件夾,之后點(diǎn)擊下方的“Configure”進(jìn)行設(shè)置。

使用CMake生成VS2017工程文件

默認(rèn)其選項(xiàng)即可:

使用CMake生成VS2017工程文件

然后依次點(diǎn)擊Configure、Generate:

使用CMake生成VS2017工程文件
使用CMake生成VS2017工程文件

看到最后輸出成功即可。

使用CMake生成VS2017工程文件

此時(shí)可以在剛剛設(shè)置的目標(biāo)文件夾下找到已經(jīng)生成的.sln文件,雙擊使用Visual Studio 2017打開(kāi)該解決方案,即可直接進(jìn)行編譯。

找到生成的.sln文件
使用Visual Studio 2017生成解決方案
使用Visual Studio 2017生成解決方案

編譯成功后,可以在剛剛目錄的build\src\Debug\目錄下找到編譯后的文件:

找到編譯后的文件

下載GLAD庫(kù)

GLAD提供了一個(gè)在線服務(wù)地址,用來(lái)配置和生成GLAD庫(kù)。

在線服務(wù)網(wǎng)址:https://glad.dav1d.de/

可以按照如下的內(nèi)容配置,在GL的版本上,只要選擇一個(gè)3.3以上的版本即可,這里選擇的最新版本4.6,Profile處要選擇Core模式。

GLAD的在線配置

生成好后直接下載對(duì)應(yīng)的壓縮包即可。

下載GLAD包

解壓后得到如下文件:

解壓GLAD包得到的文件

將所需的文件打包

為了方便,這一步我們將所有OpenGL用到的依賴包打包在一個(gè)文件夾下,這樣這一個(gè)文件夾就包含了所有所需的外部依賴。當(dāng)然你也可以跳過(guò)這一步,但是接下來(lái)你的每一個(gè)新工程的引入都還需要在所有地點(diǎn)將各個(gè)包引入。

新建一個(gè)文件夾,這里將其命名為Packages。

分別找到GLFW源碼中include\文件夾下的GLFW文件夾、下載的GLAD庫(kù)放到一個(gè)新建的Packages\include\文件夾下:

創(chuàng)建Packages依賴包
創(chuàng)建Packages依賴包

將GLFW編譯后的.lib庫(kù)文件放在新建的Packages\lib\文件夾下:

創(chuàng)建Packages依賴包

將下載的GLAD庫(kù)中的src文件夾中的文件放入Packages\src\文件夾下(你也可以直接將glad下的src文件夾放置在Packages文件夾下):

創(chuàng)建Packages依賴包

最后得到的這個(gè)Packages即是我們整合好的包,這個(gè)包的最終結(jié)構(gòu)大概如下面這個(gè)樣子,接下來(lái)只需要將這個(gè)包進(jìn)行引入即可。

Packages依賴包的結(jié)構(gòu)

注:為了給大家提供方便,我已經(jīng)將整合好的Packages包打包,需要的話可以直接下載:https://pan.baidu.com/s/1iwJhRHecTnn6GtVYSewrQg 提取碼:s733

創(chuàng)建一個(gè)工程并將Packages的內(nèi)容引入

這里使用Visual Studio 2017,創(chuàng)建一個(gè)C++的空項(xiàng)目。

創(chuàng)建一個(gè)C++空項(xiàng)目

接下來(lái)配置是為了是我們的GLFW庫(kù)和GLAD庫(kù)在我們新建的項(xiàng)目中起作用。在項(xiàng)目處右鍵,選擇屬性,先切換到“VC++目錄”下:

引入GLFW庫(kù)和GLAD庫(kù)

先引入“包含目錄”:

引入GLFW庫(kù)和GLAD庫(kù)
引入GLFW庫(kù)和GLAD庫(kù)

再引入“庫(kù)目錄”包:

引入GLFW庫(kù)和GLAD庫(kù)
引入GLFW庫(kù)和GLAD庫(kù)

最后轉(zhuǎn)到“鏈接器”的“輸入”選項(xiàng),添加附加依賴項(xiàng):opengl32.libglfw3.lib,這個(gè)地方直接輸入即可:

引入GLFW庫(kù)和GLAD庫(kù)
引入GLFW庫(kù)和GLAD庫(kù)

最后在項(xiàng)目的“源文件”中添加Packages包中的src\glad.c:

引入GLFW庫(kù)和GLAD庫(kù)

找到Packages\src\glad.c,將其加入即可:

引入GLFW庫(kù)和GLAD庫(kù)

驗(yàn)證配置是否成功

以上,一切準(zhǔn)備工作都做好了!如果你想檢測(cè)一下配置的結(jié)果是否可用,可以新建一個(gè)main.cpp文件,然后在頭文件處加入:

    #include <glad/glad.h>
    #include <GLFW/glfw3.h>

如果沒(méi)有報(bào)錯(cuò),很大程度上講應(yīng)該是成功了!


轉(zhuǎn)載請(qǐng)注明出處,本文永久更新鏈接:
https://blogs.littlegenius.xin/2019/01/24/OpenGL學(xué)習(xí)筆記(一)使用VS2017和CMake配置GLFW和GLAD/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評(píng)論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書人閱讀 178,980評(píng)論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 64,064評(píng)論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,779評(píng)論 6 414
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 56,109評(píng)論 1 330
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 43,287評(píng)論 0 291
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評(píng)論 1 338
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,515評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,750評(píng)論 1 375
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,933評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 35,327評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 36,667評(píng)論 1 296
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,492評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,703評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容