OpenGL标准库及安装

一.介绍

在OpenGL的开发中,有一些开源库已经提供了我们所需的功能,同时也是我们常用的功能,这些库节省了我们书写操作系统相关代码的时间,提供给我们一个窗口和上下文用来渲染。最流行的几个库有GLUT,SDL,SFML和GLFW。
OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。从图1可以看出,gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。

二.GLEW/GLAD库

  GLEW是一个基于OpenGL图形接口的跨平台的C++扩展库。GLEW能自动识别当前平台所支持的全部OpenGL高级扩展函数。只要包含glew.h头文件,就能使用gl,glu,glext,wgl,glx的全部函数。GLEW支持目前流行的各种操作系统。
//GLEW是用来管理函数指针的,所以在调用任何OpenGL函数之前需要初始化GLEW
OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,在Windows上会是类似这样:
// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);
你可以看到代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中GLEW是目前最新,也是最流行的库。

GLAD也是个第三方库,作用和GLEW类似,glad入门可以学习下这篇文章:https://blog.csdn.net/zjz520yy/article/details/83000096

Glad的库地址:https://glad.dav1d.de/,选择自己需要的配置点击Generate即可。

三.GLFW

GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。

推荐看过的还不错的一篇文章:GLFW简单入门

以及官网教程:https://www.glfw.org/docs/latest/quick_guide.html#quick_include

这里有一个需要注意的点,在博客里也提到的,必须在包含GLFW的头文件之前包含了GLEW/GLAD的头文件,因为GLFW是依赖于OpenGL的头文件的。GLEW/GLAD的头文件包含了正确的OpenGL头文件(例如GL/gl.h),所以需要在其它依赖于OpenGL的头文件之前包含GLAD。


四.动态链接与静态链接


静态(Static)链接是指编译时就将库代码里的内容整合进你的二进制文件。优点就是你不需要管理额外的文件了,只需要发布你单独的一个二进制文件就行了。缺点就是你的可执行文件会变得更大,另外当库有升级版本时,你必须重新进行编译整个程序。动态(Dynamic)链接是指一个库通过.dll或.so的方式存在,它的代码与你的二进制文件的代码是分离的。优点是使你的二进制文件大小变小并且更容易升级,缺点是你最终发布程序时必须带上这些DLL。
如果你希望静态链接GLEW,必须在包含GLEW头文件之前定义预处理器宏GLEW_STATIC:
#define GLEW_STATIC
#include
如果你希望动态链接,那么你可以省略这个宏。但是记住使用动态链接的话你需要拷贝一份.DLL文件到你的应用程序目录。

五.下载与安装

glfw和glew,这两个都可以到官网直接下载,下载之后,在vs工程属性里,将其include目录添加到VC++包含目录中,IDE会从这些目录里寻找头文件,然后,在链接器里添加相应的lib文件即可。

glad,这个库通过在线服务得到,可能访问比较慢,所以我直接把我下载的放到了网盘上,链接:https://pan.baidu.com/s/1y__lOhXqJQbxcEjaEqRKlQ 
提取码:ektp 

它的配置也是要添加相关include目录,然后再把里面的一个.c文件添加到工程当中即可。

你可能感兴趣的:(OpenGL)