OpenGL开发库介绍

OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)、独立框架库(glfw)和扩展函数库等。

核心库(gl)

OpenGL系列分为OpenGL标准版、ES版、SC。

flowchart TB
    subgraph OpenGL
        direction TB
        subgraph OpenGL ES
            direction RL
            subgraph OpenGL SC
                direction TB
            end
        end
    end

OpenGL PC版为最全版本,一般由显卡厂商提供最全的支持。不同系统与OpenGL交互接口为WGL/GLX/AGL等窗口库。

在嵌入式设备中(比如手机、树莓派等等),GUP性能较弱,使用简化版的OpenGL,即OpenGL ES(Embedded System)。系统窗口与OpenGL ES交互接口为EGL库。

在飞机、汽车等实时性要求比较高的情况下,OpenGL ES再次简化为OpenGL SC(Safety Critical Profile),只有十几个函数。

函数一般以gl开头,最基本的3D函数

实用库(glu)

OpenGL Utility,对部分gl函数进行封装,起辅助作用。

函数一般以glu开头,包含纹理、坐标、基本形状

辅助库(glaux)

OpenGL Auxiliary Library

函数一般以aux开头,包含窗口、输入输出、基本形状

使用工具库(glut)

OpenGL Utility Toolkit是一个处理OpenGL程式的工具库,负责处理和底层操作系统的调用以及I/O。(代替aux库的独立GUI)

版本太老了,理应被时代淘汰,不推荐使用。gult最后版本v3.7beta的历史可追溯至1998年8月,且该项目已经被废弃。它的许可证禁止任何人发布修改后的库代码。

gult对应的开源实现是freegult。

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

freeglut

因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。

freeglut完全兼容glut,是glut的代替品,开源,功能齐全。目前来看,freeglut 3.0版本比其它版本稳定,推荐使用。帕维尔在1999年12月1日开始freeglut的开发。目前,该项目几乎可以100%的替代原来的GLUT,只有少数差别(如,the abandonment of SGI-specific features,按钮盒子和动态视频分辨率)和 其他一小部分程序Bug。

函数一般以glut开头

glfw

OpenGL Framework(glfw)的开发目的是用于替代glut的。它是一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。

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

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

函数一般以glfw开头

函数加载

glew

The OpenGL Extension Wrangler Library

glut或者freegult主要是OpenGL 1.0的基本函数功能;glew是使用OpenGL 2.0之后的一个工具函数。

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

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

glad

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

glad是继gl3w,glew之后,当前最新的用来访问OpenGL规范接口的第三方库。简单说glad是glew的升级版,就是说glew比较老,glad比较新。

通常来说glfw+glad、glfw+glew、glut+glew

窗口库

  • GLX:OpenGL X11窗口系统扩展
  • WGL:OpenGL Windows窗口系统扩展
  • AGL:OpenGL Apple窗口系统扩展
  • EGL:Android等嵌入式设备窗口系统扩展

扩展函数库

扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。

源码

所有源代码地址:OpenGL


OpenGL开发库介绍
https://blog.jackeylea.com/opengl/introduction-of-opengl-library/
作者
JackeyLea
发布于
2020年11月1日
许可协议