構建GLFW
GLFW可以從它官方網站的下載頁上獲取(https://www.glfw.org/download.html)。GLFW已經有針對Visual Studio 2013/2015的預編譯的二進制版本和相應的頭文件,但是為了完整性我們將從編譯源代碼開始。所以我們需要下載源代碼包,點擊下圖中的Source package按鈕下載源碼包。
下載源碼包之后,將其解壓並打開。從源代碼編譯庫可以保證生成的庫是兼容你的操作系統和CPU的,而預編譯的二進制文件可能會出現兼容問題(甚至有時候沒提供支持你系統的文件)。提供源代碼所產生的一個問題在於不是每個人都用相同的IDE開發程序,因而提供的工程/解決方案文件可能和一些人的IDE不兼容。所以人們只能從.c/.cpp和.h/.hpp文件來自己建立工程/解決方案,這是一項枯燥的工作。但因此也誕生了一個叫做CMake的工具。
CMake
CMake是一個工程文件生成工具。用戶可以使用預定義好的CMake腳本,根據自己的選擇(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。這允許我們從GLFW源碼里創建一個Visual Studio 2013工程文件,之后進行編譯。首先,我們需要從這里(https://cmake.org/download/ 選擇win64-x64)下載安裝CMake。當CMake安裝成功后,你可以選擇從命令行或者GUI啟動CMake,由於我不想讓事情變得太過復雜,我們選擇用GUI。CMake需要一個源代碼目錄和一個存放編譯結果的目標文件目錄。源代碼目錄我們選擇GLFW的源代碼的根目錄,然后我們新建一個 build 文件夾,選中作為目標目錄。
在設置完源代碼目錄和目標目錄之后,點擊Configure(設置)按鈕,讓CMake讀取設置和源代碼。我們接下來需要選擇工程的生成器,由於我們使用的是Visual Studio 2013,我們選擇 Visual Studio 12 2013 選項。CMake會顯示可選的編譯選項用來配置最終生成的庫。這里我們使用默認設置,並再次點擊Configure(設置)按鈕保存設置。保存之后,點擊Generate(生成)按鈕,生成的工程文件會在你的build文件夾中。
編譯
在build文件夾里可以找到GLFW.sln文件,用Visual Studio 2013打開。因為CMake已經配置好了項目(整個解決方案中有30個項目,我們需要的是其中的一個glfw,其用於生成glfw3.lib文件),所以在glfw項目上右鍵生成,將編譯生成庫glfw3.lib(注意我們用的是第3版)就會出現在src/Debug文件夾內。
庫生成完畢之后,我們需要讓IDE知道庫和頭文件的位置。有兩種方法:
- 找到IDE或者編譯器的/lib和/include文件夾,添加GLFW的include文件夾里的文件到IDE的/include文件夾里去。用類似的方法,將glfw3.lib添加到/lib文件夾里去。雖然這樣能工作,但這不是推薦的方式,因為這樣會讓你很難去管理庫和include文件,而且重新安裝IDE或編譯器可能會導致這些文件丟失。
- 推薦的方式是建立一個新的目錄包含所有的第三方庫文件和頭文件,並且在你的IDE或編譯器中指定這些文件夾。我個人會使用一個單獨的文件夾,里面包含Libs和Include文件夾,在這里存放OpenGL工程用到的所有第三方庫和頭文件。這樣我的所有第三方庫都在同一個位置(並且可以共享至多台電腦)。然而這要求你每次新建一個工程時都需要告訴IDE/編譯器在哪能找到這些目錄。以下是本人機器上的目錄(借圖,按照類似的方式建立一個文件夾就好)
完成上面步驟后,我們就可以使用GLFW創建我們的第一個OpenGL工程了!
我們的第一個工程
首先,打開Visual Studio,創建一個新的項目。如果VS提供了多個選項,選擇Visual C++,然后選擇Empty Project(空項目)(別忘了給你的項目起一個合適的名字)。現在我們終於有一個空的工作空間了,開始創建我們第一個OpenGL程序吧!
鏈接
為了使我們的程序使用GLFW,我們需要把GLFW庫鏈接(Link)進工程。這可以通過在鏈接器的設置里指定我們要使用glfw3.lib來完成,但是由於我們將第三方庫放在另外的目錄中,我們的工程還不知道在哪尋找這個文件。於是我們首先需要將我們放第三方庫的目錄添加進設置。要添加這些目錄(需要VS搜索庫和include文件的地方),我們首先進入Project Properties(工程屬性,在解決方案窗口里右鍵項目),然后選擇VC++ Directories(VC++ 目錄)選項卡(如下圖)。在下面的兩欄添加目錄(包含目錄以及庫目錄):
這里你可以把自己的目錄加進去,讓工程知道到哪去搜索。
這里可以添加任意多個目錄,IDE會從這些目錄里尋找頭文件。所以只要你將GLFW的Include文件夾加進路徑中,你就可以使用<GLFW/..>來引用頭文件。庫文件夾也是一樣的。
現在VS可以找到所需的所有文件了。最后需要在Linker(鏈接器)選項卡里的Input(輸入)選項卡里添加glfw3.lib和opengl32.lib這兩個文件:
GLFW的安裝與配置就到此為止。
配置GLAD
GLAD是一個開源的庫,它能解決我們上面提到的那個繁瑣的問題。GLAD的配置與大多數的開源庫有些許的不同,GLAD使用了一個在線服務。在這里我們能夠告訴GLAD需要定義的OpenGL版本,並且根據這個版本加載所有相關的OpenGL函數。
打開GLAD的在線服務(https://glad.dav1d.de/),將語言(Language)設置為C/C++,在API選項中,選擇3.3以上的OpenGL(gl)版本(我們的教程中將使用3.3版本,但更新的版本也能正常工作)。之后將模式(Profile)設置為Core,並且保證生成加載器(Generate a loader)的選項是選中的。現在可以先(暫時)忽略拓展(Extensions)中的內容。都選擇完之后,點擊生成(Generate)按鈕來生成庫文件。
GLAD現在應該提供給你了一個zip壓縮文件,包含兩個頭文件目錄,和一個glad.c文件。將兩個頭文件目錄(glad和KHR)復制到你的Includes文件夾中(注意這個Includes是配置GLFW時配置的Libraries文件夾下的子目錄,而非工程下的目錄),並添加glad.c文件到你的工程中。
經過前面的這些步驟之后,你就應該可以將以下的指令加到你的文件頂部了:
#include <glad/glad.h>
點擊編譯按鈕應該不會給你提示任何的錯誤,到這里我們就已經准備好GLFW和GLAD環境了,去真正使用GLFW和GLAD來設置OpenGL上下文並創建一個窗口了。記得確保你的頭文件和庫文件的目錄設置正確,以及鏈接器里引用的庫文件名正確。
參考:
https://blog.csdn.net/ice_ly000/article/details/80336873
https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/