使用 glew
glew 全称是 OpengGL Extension Wrangler Library,它能够帮忙解决 OpengGL 不断扩展的问题。初始化 glew 之后,它将查询系统上所有可用的扩展功能并自动加载它们,然后提供一个头文件作为接口,我们直接通过头文件就可以使用这些扩展功能。
glew 的下载地址
http://glew.sourceforge.net/
下载之后进行解压,得到的目录结构
|-glew-2.1.0
|-bin
|-lib
|-include
|-doc
接下来开始配置环境,配置的方式有两种,第一种方式跟配置 glut 一样,系统级的配置,配置之后所有的 opengl 项目都不需要配置
- 第一步,把 include 目录下的头文件放在 %VISUAL_STUDIO%\VC\include\gl 目录下
- 第二步,把 lib 目录下的 lib 文件放在 %VISUAL_STUDIO%\VC\lib 目录下,然后在项目属性的 链接器 –> 输入 添加相应库的引用
- 第三步,把 bin 目录下的 dll 文件放在 system32 目录下,同样的 64 位系统要放在 sysWOW64 目录下
这种方式虽然能够一劳永逸,但因为 win32 和 x64 的库文件名一样,所以无法做到兼容,即无法同时把 32 位的库文件和 64 位的库拷到系统路径;另外过多地把库文件拷到系统路径也不好,因此推荐使用第二种方式,即给每个创建的项目配置环境
- 把头文件放在 $PROJECT_ROOT%\include\GL 目录下,然后在项目属性的 C/C++ –> 附加包含目录 中添加 .\include
- 把静态库 lib 文件放在 $PROJECT_ROOT%\lib 目录下,然后在项目属性的 链接器 –> 常规 –> 附加库目录 中添加 .\lib,在 链接器 –> 输入 中添加相应库的引用
- 把动态库 dll 文件放在可执行程序 exe 同级目录下
如果一个项目想同时编译 32 位和 64 位,则可以分别把 32 位的 lib 文件和 64 位的 lib 文件放在 .\lib\win32 和 .\lib\x64 目录下,然后分别修改附加库目录,再把相应的 dll 文件拷到编译后的 32 位程序和 64 位程序目录下。
GL context
在开始绘制图形之前,我们必须先了解 GL context 和 GL objects 这两个重要概念,参考文档 https://www.khronos.org/opengl/wiki/Main_Page
上一篇文章讲到 OpenGL 渲染是基于状态(state)的。OpenGL context 是一个重要的概念的,只有创建了 context,OpenGL 才存在,context 一旦被销毁了,OpenGL 就不存在了。context 存储了一个 OpenGL 实例的所有状态,类似于一个程序开辟的所有内存空间。context 可以看作进程在操作系统中的一个执行过程,一个进程可以创建多个 context,每一个 context 代表一个可视面,就像一个应用程序的一个界面一样。
简单来讲,context 保存了一个 OpenGL 实例的所有状态,在使用 OpenGL 之前必须先创建一个 context。
int main(