目录
1、OpenGL
2. .GLUT
3、Freeglut
4、glew
5、glfw
6、glad
1、OpenGL
OpenGL只有框架没有实现,换句话说就是OpenGL只有函数声明没有源文件实现,类似于接口和虚函数。所有的实现是显卡生产商提供。比如NVIDIA或者AMD就要自己实现OpenGL函数内容,所以不同的生产商可以对自己的产品提供优化,毕竟代码是自己写的。
OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)和扩展函数库等。gl是核心,glu是对gl的部分封装。glx、agl、wgl是针对不同窗口系统的函数。他们之前的关系如下图所示。
OpenGL网址:
OpenGL - The Industry Standard for High Performance Graphicshttps://opengl.org/
2. .GLUT
glut全称为:OpenGL工具库 OpenGL Utility Toolkit,是实用工具库,基本上是用于做窗口界面的,并且是跨平台。这部分函数以glut开头,主要包括窗口操作函数,窗口初始化、窗口大小、窗口位置等函数;回调函数:响应刷新消息、键盘消息、鼠标消息、定时器函数等;创建复杂的三维物体;菜单函数;程序运行函数。gult对应的开源实现是Freegult。
3、Freeglut
Freeglut是glut的一个开源库。因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。freeglut完全兼容glut,是glut的代替品,开源,功能齐全。目前来看,freeglut 3.0版本比其它版本稳定,推荐使用。帕维尔在1999年12月1日开始freeglut的开发。目前,该项目几乎可以100%的替代原来的GLUT,只有少数差别(如,the
abandonment of SGI-specific features,按钮盒子和动态视频分辨率)和 其他一小部分程序Bug。
4、glew
glew全称为:The OpenGL Extension Wrangler Library glut。glew是使用OpenGL 2.0之后的一个工具函数。
不同的显卡公司,也会发布一些只有自家显卡才支持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识别你的平台所支持的全部OpenGL高级扩展函数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数。
glew包含了OpenGL所需的核心。前面已经说过openGL的实现是显卡生产商,那么系统如何才能找到这些实现好的函数呢?而且不同的平台函数存放地方还不同,文件结构也不同。有没有一种方式能够自动找到OpenGL的函数?这就是glew的作用:用来找openGL的函数,并初始化,这样我们就能直接调用OpenGL的函数了。
5、glfw
glfw全称为:OpenGL Framework。glfw是OpenGL,OpenGL ES和vutkan开发的开源,多平台库。它提供了一个简单的API,用于创建Windows,上下文和曲面,接收输入和事件。
glfw的开发目的是用于替代glut的。它是一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGLES,用来管理窗口,读取输入,处理事件等。
glfw是glut/freegult的升级和改进。glfw是用来显示窗口和捕捉窗口事件的一套API,可以理解成Qt和windows平台的WPF。OpenGL只是一套控制GPU的规则,并没有对于跨平台窗口显示和事件进行规定,所以需要一个显示显卡渲染的窗口,这就是glfw的作用。
6、glad
glad是继gl3w,glew之后,当前最新的用来访问OpenGL规范接口的第三方库。简单说glad是glew的升级版,就是说glew比较老,glad比较新。
总结:
①glew(The OpenGL Extension Wrangler Library)是对底层OpenGL接口的封装,可以让你的代码跨平台。
②glad与glew作用相同,可以看作它的升级版。
③Freeglut(OpenGL Utility Toolkit)主要用于创建OpenGL上下文、接收一些鼠标键盘事件等等。
④glfw(Graphics Library Framework)是Freeglut升级版,作用基本一样。
⑤通常来说glad和glfw配合使用。
⑥glew和Freeglut也配合使用,比如OpenGL红宝书上面的例子。