创建窗口
在画出效果之前,我们需要创建一个OpenGL上下文和一个用于显示的窗口。然而,这些操作在不同平台上是不一样的。
幸运的是,有一些库已经提供了我们所需的功能,其中一部分就是特别针对OpenGL的。这些库能省去我们书写操作系统相关代码的时间(例如创建window窗口,实际需要调用window下系统API),提供给我们一个窗口和上下文用于渲染。最流行的几个库有GLUT,SDL,SFML和GLFW。这里使用教程中推荐的GLFW。
GLFW相关源码编译操作生成lib略过,具体可查看教程中详细描述。
GLAD
GLFW安装成功后还没结束,我们仍有件事去做。因为OpenGL仅仅是个规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它的大多数函数的位置是无法在编译时就确定下来的,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,在Windows上会是类似这样:
// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);
可以看出这样做十分繁琐,我们需要针对每个可能使用的函数重复上面的过程。运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。
GLAD库具体配置略过,相比于GLFW,其配置更加简单。