使用OpenGL创建小窗口以及环境的搭建流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DY_1024/article/details/88855866

由于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了~,可以试着跑一下,看有没有错误。

猜你喜欢

转载自blog.csdn.net/DY_1024/article/details/88855866
今日推荐