使用OpenGL創建小窗口以及環境的搭建流程

由於OpenGL是獨立於各個操作系統的,而我們進行OpenGL的開發的時候,需要的是一個OpenGL的狀態,也就是OpenGL的上下文,還需要一個窗口,來表現我們要展示的東西,但是相對於各個操作系統,創建窗口和提供OpenG的上下文是不同的,所以此時我們使用一個叫做:GLFW的C庫,

GLFW

GLFW是專門針對OpenGL的一個C庫,他可以幫助我們提供OpenGL的上下文以及我們需要的窗口,還可以設置窗口的參數。

我們可以在GLFW官網下載:https://www.glfw.org/download.html

有關專家建議的是:最好是下載源碼然後自己編譯,因爲有老鐵反應下載已經編譯好的包的話,會有一些莫名其妙的問題,然後自己編譯源碼的話,一定是最適合自己的機器的。

我是下載的源碼,然後自己編譯的,下載的源碼裏面有對應的CMakeList文件,我們可以使用CMakeList-GUI進行工程的構建,很簡單,下載源碼之後,然後在CMake-GUI裏面講源碼的根目錄設置爲CMake-GUI的源目錄,然後我們自己建立一個build工程,用來生成GLFW有關lib庫,具體使用CMake-GUI的方法可以再我的另一篇博客找到:https://blog.csdn.net/DY_1024/article/details/82897406

這裏我就不多介紹了,使用CMake-GUI生成我們的工程之後,會有一個GLFW.sln文件:

因爲我在CMake-GUI裏面設置的是生成2015的工程,所以我用2015打開,運行並且編譯這個工程,就會在src/Debug文件裏面生成我們的lib庫:glfw

現在我們GLFW的lib和頭文件已經有了,(頭文件就在我們下載的源碼裏面,include文件夾裏面)

我們就可以建立我們自己的工程了,在VS中建立一個空項目,一定要是空項目,不然會有很多問題。

空項目建立好之後,我們將頭文件以及lib包含到工程裏面,

Tip:這裏一定要注意,配置32位的環境,就要運行32位的程序,不然就相當於沒有配。

這個時候我們就可以添加頭文件了:#include <GLFW\glfw3.h>

GLAD

因爲OpenGL只是一個規範,具體的實現需要在具體的顯卡上面,而且大多數的函數位置無法在編譯的時候確定下來,需要在運行的時候查詢,開發者需要獲取函數的地址然後將其保存指針中,供以後使用。

在Winows中就會變成下面這樣:

// 定義函數原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正確的函數並賦值給函數指針
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 現在函數可以被正常調用了
GLuint buffer;
glGenBuffers(1, &buffer);

每一次使用gl指令,都要去尋找一下,十分的繁瑣。

GLAD庫就會簡化這個過程。

我們可以在GLAD的官網:https://glad.dav1d.de/

來配置自己的壓縮包,將語言設置爲C/C++,在API選項中,選擇3.3以上的OpenGL(gl)版本。之後將模式(Profile)設置爲Core,並且保證生成加載器(Generate a loader)的選項是選中的。

然後點擊生成,他就會提供我們一個壓縮包,這個壓縮包裏面包含兩個頭文件目錄,和一個glad.c文件。

將兩個頭文件目錄(gladKHR)複製到你的Include文件夾中,並添加glad.c文件到你的工程中。

Tip:單獨建立了一個文件夾,裏面放的GLAD以及GLFW的頭文件以及需要的lib庫,這樣添加起來會比較方便。

除了在工程中包含頭文件目錄和庫目錄之外,我們還需要添加庫的依賴項。

opengl32.lib(這個是windows自帶的,直接寫進去就行)
glfw3.lib(這個是我們編譯生成的)

然後就是我們的頭文件:

現在我們在基本的配置已ok,可以寫一個簡單的main函數跑一下:

int main()
{
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    return 0;
}

 

調用glfwInit函數來初始化GLFW

使用glfwWindowHint函數將主版本號(Major)和次版本號(Minor)都設爲3

然後最後一個指令就是告訴GLFW我們使用的是核心模式(Core-profile)

這樣我們基本的環境就ok了~,可以試着跑一下,看有沒有錯誤。

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