OpenGL之gult/freeglut/glew/glfw/glad的联系与区别

强颜欢笑 提交于 2020-05-02 11:41:15

本篇内容主要参考了文章:https://blog.csdn.net/AvatarForTest/article/details/79199807,但是本人也添加了个人见解。

 

1.OpenGL总览

OpenGL只有框架没有实现,换句话说就是OpenGL只有函数声明没有源文件实现,类似于接口和虚函数。所有的实现是显卡生产商提供。比如NVIDIA或者AMD就要自己实现OpenGL函数内容,所以不同的生产商可以对自己的产品提供优化,毕竟代码是自己写的。

OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)和扩展函数库等。gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大(aux很大程度上已经被glut库取代)。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。

https://opengl.org/

 

 

2.gult

OpenGL Utility Toolkit

https://www.opengl.org/resources/libraries/glut/glut_downloads.php

里面有32位的库文件下载,glutdlls37beta.zip,但是版本太老了,被淘汰了,不推荐使用。

这部分函数以glut开头,主要包括窗口操作函数,窗口初始化、窗口大小、窗口位置等函数;回调函数:响应刷新消息、键盘消息、鼠标消息、定时器函数等;创建复杂的三维物体;菜单函数;程序运行函数。gult对应的开源实现是freegult。

 

 

3.freeglut

FreeGLUT is a free-software/open-source alternative to the OpenGL Utility Toolkit (GLUT) library

freeglut完全兼容glut,是glut的代替品,开源,功能齐全,但是据说bug太多,稳定性也不好。目前来看,freeglut 3.0版本比其它版本稳定,推荐使用。

http://freeglut.sourceforge.net/

 

 

4.glew

The OpenGL Extension Wrangler Library

GLUT或者FREEGLUT主要是1.0的基本函数功能;GLEW是使用OPENGL2.0之后的一个工具函数。

不同的显卡公司,也会发布一些只有自家显卡才支持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识别你的平台所支持的全部OpenGL高级扩展函数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数。

glew包含了OpenGL所需的核心。第1条已经说过openGL的实现是显卡生产商,那么系统如何才能找到这些实现好的函数呢?而且不同的平台函数存放地方还不同,文件结构也不同。有没有一种方式能够自动找到OpenGL的函数?这就是glew的作用:用来找openGL的函数,并初始化,这样我们就能直接调用OpenGL的函数了。
http://glew.sourceforge.net/

 

 

5.glfw

glfw is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contexts and surfaces, receiving input and events.

glfw无愧于其号称的lightweight的OpenGL框架,的确是除了跨平台必要做的事情都没有做,所以一个头文件,很少量的API,就完成了任务。glfw的开发目的是用于替代glut的,从代码和功能上来看,我想它已经完全的完成了任务。

一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。

那么glfw有何优势呢?glut太老了,最后一个版本还是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齐全,但是bug太多。稳定性也不好(不是我说的啊),glfw应运而生。

总之,glfw是glut的升级和改进。glfw是用来显示窗口和捕捉窗口事件的一套API,可以理解成Qt和windows平台的WPF。OpenGL只是一套控制GPU的规则,并没有对于跨平台窗口显示和事件进行规定,所以需要一个显示显卡渲染的窗口,这就是glfw的作用。

https://www.glfw.org/

 

 

6.glad

Multi-Language GL/GLES/EGL/GLX/WGL Loader-Generator

简单说glad是glew的升级版。用哪个都行。就是glew比较老,glad比较新。

https://glad.dav1d.de/

 

 

7.结论与项目使用

  • 窗口管理

古老产品:glut/freeglut
替代品:glfw

  • 函数加载

古老产品:glew
替代品:glad

  • 通常有这三种环境配置

(1)glfw+glew

(2)glfw+glad

(3)freeglut

 

 

x1.库文件和源码下载

请访问我的另一篇博文:

https://libaineu2004.blog.csdn.net/article/details/105308235

 

 

x2.参考文献

OpenGL超级宝典visual studio 2013开发环境配置 GLTools

http://www.it165.net/pro/html/201504/38164.html

OpenGL+VS2017 环境配置(亲测好使)

https://blog.csdn.net/AvatarForTest/article/details/79199807

《OpenGL编程指南》红宝书,Khronos小组编写的OpenGL官方权威指南

《OpenGL超级宝典》蓝宝书

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!