[CG 从零开始] 2.弄清 OpenGL工具链
1. 跨平台窗口管理
为了将 OpenGL 渲染的内容在操作系统的窗口中显示出来,我们不可避免的需要调用操作系统的 API 创建窗口、渲染上下文等等,每个操作系统的 API 都不一样,为了减少繁琐工作以及为了程序的可以移植性,有一些工具库帮助我们完成了这些事情,使得我们不需要和 native API 打交道。
1.1 glut
OpenGL Utility Toolkit (GLUT) 是一个用于 OpenGL 程序的实用程序库,主要执行与主机操作系统的系统级 I/O。执行的功能包括窗口定义、窗口控制以及键盘和鼠标输入的监控。还提供了用于绘制许多几何图元(实体和线框模式)的例程,包括立方体、球体和犹他茶壶。GLUT 对创建弹出菜单也有一些有限的支持。
GLUT 的两个目标是允许在操作系统之间创建相当可移植的代码(GLUT 是跨平台的)并使学习 OpenGL 更容易。在使用 GLUT 时开始使用 OpenGL 编程通常只需要几行代码,并且不需要了解操作系统特定的窗口 API。
1.2 freeglut
freeglut 可以认为是 glut 的替代品,glut 已经不在维护和更新了,已经太老了,而且 glut 的许可不许修改并发布,所以后面有了 freeglut,freeglut 支持的操作系统更加完善,而且不断在更新、维护。
1.3 glfw
GLFW 是一个开源的多平台库,用于桌面上的 OpenGL、OpenGL ES 和 Vulkan 开发。它提供了一个简单的 API,用于创建窗口、上下文和表面,接收输入和事件。GLFW 是用 C 语言编写的,支持 Windows、macOS、X11 和 Wayland。glfw 很年轻,而且很活跃在 github 已经有了 3.9k+ star, 可以来代替 glut 和 freeglut。
2. OpenGL 函数加载库
OpenGL 加载库是一个在运行时加载指向 OpenGL 函数、核心以及扩展的指针的库。这是在大多数平台上从 1.1 以上的 OpenGL 版本访问函数所必需的。扩展加载库还抽象出不同平台上加载机制之间的差异。
大多数扩展加载库不需要包含 gl.h。相反,它们提供了自己必须使用的头文件。大多数扩展加载库使用代码生成来构造加载函数指针和包含的头文件的代码。
运行时加载可以进行 fallback 机制,例如某个能力当前平台不支持,那么可以降级到另一个功能上。
2.1 glew
OpenGL Extension Wrangler Library (GLEW) 是一个跨平台的开源 C/C++ 扩展加载库。GLEW 提供了有效的运行时机制来确定目标平台支持哪些 OpenGL 扩展。OpenGL 核心和扩展功能在单个头文件中公开。GLEW 已经在各种操作系统上进行了测试,包括 Windows、Linux、Mac OS X、FreeBSD、Irix 和 Solaris。
2.2 glad
GLAD 继 GL3W,GLEW之后,是一个比较获取的函数加载库,提供在线生成服务,可以选择自己需要的能力。官方网址为https://glad.dav1d.de/
2.3 结论
作为实验、学习、能力验证等,使用 glfw
+ glad
即可满足需求。