OpenGL的glut、freeglut、glfw、glew、glad的功能说明
OpenGL 函数库相关的 API 有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)和扩展函数库等。
gl 是核心,glu 是对 gl 的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。
glut 是为跨平台的 OpenGL 程序的工具包,比aux 功能强大(aux 很大程度上已经被 glut 库取代)。
扩展函数库是硬件厂商为实现硬件更新利用 OpenGL 的扩展机制开发的函数。
窗口管理
窗口操作在每个系统上都是不一样的,OpenGL 有目的地将这些操作抽象(Abstract)出去。
这意味着我们不得不自己处理创建窗口,定义 OpenGL 上下文以及处理用户输入。
幸运的是,有一些库已经提供了我们所需的功能。这些库节省了我们书写操作系统相关代码的时间,提供给我们一个窗口和上下文用来渲染。
glut
OpenGL 工具库(OpenGL Utility Toolkit),所有 glut 的库函数均以 glut 开头,但是版本太老了,理应被时代淘汰,不推荐使用。
gult 最后版本 v3.7beta 的历史可追溯至 1998 年 8月,且该项目已经被废弃。它的许可证禁止任何人发布修改后的库代码。
freeglut
gult 对应的开源实现,完全兼容 glut,是 glut 的代替品,开源,功能齐全。
目前来看,freeglut3.0(2015年3月7日)版本比其它版本稳定,可以使用。
该项目几乎可以 100% 的替代原来的 glut,只有少数差别(如,the abandonment of SGI-specific features,按钮盒子和动态视频分辨率)和其他一小部分程序 bug。
glfw
glfw 无愧于其号称的 lightweight 的 OpenGL 框架,的确是除了跨平台必要做的事情都没有做,所以一个头文件,很少量的 API,就完成了任务。
glfw 的开发目的是用于替代 glut 的,从代码和功能上来看,我想它已经完全的完成了任务。它是一个轻量级的,开源的,跨平台的library。
支持 OpenGL 及 OpenGL ES,用来管理窗口,读取输入,处理事件等。
freeglut与glfw的区别
最大的区别是,在处理用户输入上,FreeGLUT主要通过回调函数(Callback function),而GLFW则提供了两种输入机制即回调函数与轮询(polling)。
在回调函数方式 中,用户提供给GLFW的回调函数用来处理用户输入操作如键盘按键或鼠标操作。
当用户按下或者松开按键时,它都会被触发,包括一些特殊的键位(例如 Shift、Caps Lock、Esc等)。
而在轮询方式中,程序可以直接查询系统中是否已经按下了任意键,或者更具体一点,是否按下了某个特定的键。
它允许用户直接获取某个按键的瞬时状态,相当于用户直接询问:“这个键现在被按下了吗?”
回调函数与轮询这两种方式的最大差别,轮询方式能连续获得键盘输入,而回调函数则适用于按键速度不是特别快,不需要连续效果(比如人物不停地跑),具体可参考这篇文章。
另外,freeglut支持创建右键菜单,而GLFW不支持。
GLFW在输入机制上提供了更多选择,同时也增加了复杂性。
而freeglut则相对较为简单,因此如果从学习OpenGL与图形学的角度来看,freeglut不失为一个合适的选择。而如果对程序的连续性输入要求较高时,则可以考虑GLFW。
函数加载
OpenGL 只是一个标准/规范,具体的实现是驱动开发商针对特定显卡实现的。
由于 OpenGL 驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。
所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。
这个过程非常复杂,而且很繁琐,需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程。
glew
glut 或者 freegult 主要是 OpenGL 1.0 的基本函数功能,glew 是使用 OpenGL 2.0 之后的一个工具函数。
不同的显卡公司会发布一些只有自家显卡才支持的扩展函数,要想用这数涵数,不得不去寻找最新的 glext.h,有了 glew 扩展库,就再也不用为找不到函数的接口而烦恼,
因为 glew 能自动识别你的平台所支持的全部 OpenGL 高级扩展函数。也就是说,只要包含一个 glew.h 头文件,你就能使用 gl,glu,glext,wgl,glx 的全部函数。
glew 支持目前流行的各种操作系统,但有一个缺陷是它并没有提供一种方式可以屏蔽 OpenGL 旧函数的调用,
尽管可以使用 Core profile 的方式,但是代码中仍然存在 glVetex、glBegin 这样固定管线 OpenGL 的函数调用(虽然它们在 Core Profile 模式下没有任何作用),
看起来不那么统一。要做到这一点可以使用下面的 glad。
glad
glad 是继 gl3w,glew 之后,当前最新的用来访问 OpenGL 规范接口的第三方库。简单说 glad 是 glew 的升级版。
glad 是一个开源的库,它的配置与大多数的开源库有些许的不同,glad 使用了一个在线服务。
在这里能够指定 glad 需要定义的 OpenGL 版本,并且根据这个版本加载所有相关的OpenGL 函数。这样做让 glad.h 中仅仅只包含我们想要的头文件,
例如在设置 3.3 + Core Profile 版本之后,可以严格控制头文件中只有这些内容,所以凡是代码中有 OpenGL 旧函数的调用都会在编译的时候给出错误提示。
按用途划分
窗口管理库(creating and managing OpenGL windows)
freeglut
GLFW
GLUT
多媒体库(multimedia libraries)
Allegro version 5
SDL
SFML
Ecere SDK
部件工具箱(widget toolkits)
FLTK
Qt
wxWidgets
Game GUI
转载自:
https://blog.csdn.net/wpxu08/article/details/123774614
https://blog.csdn.net/u010087338/article/details/119292157
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!