OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等部件的关系

OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等部件的关系

一、OpenGL

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

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

OpenGL的竞争对手是Direct3D;OpenGL对应的开源实现是mesa 3D。

二、glut:OpenGL工具库 OpenGL Utility Toolkit

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

gult对应的开源实现是freegult。

三、窗口库GLX

对于X窗口系统,它所使用的的OpenGL扩展(GLX:OpenGL extension for X.)是作为OpenGL的一个附件提供的,所有的GLX函数都使用前缀glX。

apl、wgl分别用于apple、windows。

四、glew

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

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

五、glfw

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

一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。那么GLFW有何优势呢?glut太老了,最后一个版本还是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齐全,但是bug太多。稳定性也不好(不是我说的啊),GLFW应运而生。

六、层次关系

aux->glut->freeglut->glfw

glew

glu 

-------------------------------------------
opengl1.0 glx/apl/wgl

opengl2.0及以上

--------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------第二篇参考文献-----------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------

GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些OpenGL的高级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支 持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识 别你的平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全 部函数。GLEW支持目前流行的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。

项目主页: http://glew.sourceforge.net/ 
文档地址: http://glew.sourceforge.net/install.html 
下载地址: https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-src.zip

glu是实用库,包含有43个函数,函数名的前缀为glu。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。
glaux是OpenGL辅助库,包含有31个函数,函数名前缀为aux。这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。
glut是实用工具库,基本上是用于做窗口界面的,并且是跨平台(所以有时你喜欢做简单的demo的话,可以光用glut就ok了)

GLX:OpenGL extension for X.

对于X窗口系统,它所使用的的OpenGL扩展(GLX)是作为OpenGL的一个附件提供的,所有的GLX函数都使用前缀glX。

常见的OpenGL头文件如下:(Windows系统中可以忽略大小写的区别,我自己也没太注意大小写。同时,文件的路径可能变化,例如不是<GL/gl.h>而是"gl.h",具体情况要看你到底把头文件放到哪了)

<GL/gl.h>:OpenGL所使用的函数和常量声明。

<GL/glu.h>:GLU(OpenGL实用库)所使用的函数和常量声明。GLU库属于OpenGL标准的一部分。(以下各种库则不属于)

<GL/glaux.h>:GLAUX(OpenGL辅助库)所使用的函数和常量声明。这个库提供了创建窗口,处理键盘和鼠标事件,设置调色板等OpenGL本身不提供,但在编写OpenGL程序时又经常用到的功能。目前这个库已经过时,只有比较少的编译环境中有提供,例如VC系列。在VC系列编译器中,使用这个头文件之前必须使用#include <windows.h>或者具有类似功能的头文件。

<GL/glut.h>:GLUT(OpenGL实用工具包)所使用的函数和常量声明。这个库的功能大致与GLAUX类似,目前许多OpenGL教程使用这个库来编写演示程序。一些编译系统可能不直接提供这个库(例如VC系列),需要单独下载安装。这个头文件自动包含了<GL/gl.h>和<GL/glu.h>,编程时不必再次包含它们。

<GL/glext.h>:扩展头文件。因为微软公司对OpenGL的支持不太积极,VC系列编译器虽然有<GL/gl.h>这个头文件,但是里面只有OpenGL 1.1版本中所规定的内容,而没有OpenGL 1.2及其以后版本。对当前的计算机配置而言,几乎都支持OpenGL 1.4版本,更高的则到1.5, 2.0, 2.1,而VC无法直接使用这些功能。为了解决这一问题,就有了<GL/glext.h>头文件。这个头文件提供了高版本OpenGL所需要的各种常数声明以及函数指针声明。

<GL/wglext.h>:扩展头文件。与<GL/glext.h>类似,但这个头文件中只提供适用于Windows系统的各种OpenGL扩展所使用的函数和常量,不适用于其它操作系统。

"glee.h":GLEE开源库的头文件。它的出现是因为<GL/glext.h>虽然可以使用高版本的OpenGL函数,但是使用的形式不太方便。GLEE库则让高版本的OpenGL函数与其它OpenGL函数在使用上同样方便。需要注意的是,这个头文件与<GL/gl.h>是冲突的,在包含"glee.h"之前,不应该包含<GL/gl.h>。
#include <GL/glut.h>
#include "glee.h"   // 错误,因为glut.h中含有gl.h,它与glee.h冲突
                    // 但是如果把两个include顺序交换,则正确
"glos.h":虽然这个也时常见到,但我也不知道它到底是什么,可能是与系统相关的各种功能,也可能只是自己编写的一个文件。我曾经看到一个glos.h头文件中只有一句#include <GL/glut.h>。

原文链接:glut glew区别

时间: 2024-10-16 03:43:49

OpenGL2.0及以上版本中gl,glut,glew,glfw,mesa等部件的关系的相关文章

jQuery1.9&amp;2.0及其以上版本中动态元素 on绑定事件无效的解决方案

jQuery 1.9/2.0/2.1及其以上版本无法使用live函数了,然而jQuery 1.9及其以上版本提供了on函数来代替.本文讲解了jQuery on函数的使用方法,以及在使用jQuery函数中遇到的一些问题. $(selector).on(event,childSelector,data,function,map) 各个参数说明如下: 参数 描述 event 必需.规定要从被选元素移除的一个或多个事件或命名空间.由空格分隔多个事件值.必须是有效的事件. childSelector 可选

android圆角View实现及不同版本这间的兼容(android3.0过后的版本)

http://blog.csdn.net/lovecluo/article/details/8710174 在做我们自己的APP的时候,为了让APP看起来更加的好看,我们就需要将我们的自己的View做成圆角的,毕竟主流也是将很多东西做成圆角,和苹果的外观看起来差不多,看起来也还不错.要将一个View做成圆角的也很容易,只需要建立一个自定义的Drawable就可以了.我们在res/drawable下面建立一个shape的drawable,代码如下: <?xml version="1.0&qu

Apache Hudi 0.5.1版本重磅发布

历经大约3个月时间,Apache Hudi 社区终于发布了0.5.1版本,这是Apache Hudi发布的第二个Apache版本,该版本中一些关键点如下 版本升级 将Spark版本从2.1.0升级到2.4.4 将Avro版本从1.7.7升级到1.8.2 将Parquet版本从1.8.1升级到1.10.1 将Kafka版本从0.8.2.1升级到2.0.0,这是由于将spark-streaming-kafka artifact从0.8_2.11升级到0.10_2.11/2.12间接升级 重要:Hud

在低于android 5.0的版本中ActionBar不显示

我从ABS切换到AppCompat与Material theme(仅适用于API21) 我的配置文件如下: <application android:theme="@style/AppStyle" <-- values folder --> <style name="AppStyle" parent="@style/AudioRecTheme"> <style name="AudioRecTheme&

iOS6.0以上版本中的唯一标示符的一些总结

在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UIDIDs的程序将不再被审核通过,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符. 苹果已经警告过我们uniqueIdentifier将不能再使用了,并且提供了另外两个可选的.但是在程序中该选择使用哪个呢? 本文不会回答这个问题,具体用哪个是由你来根据程序的目的来做决定的. 下面我将列出iOS中目前支持的,以及被废弃的唯一标示符方法,并对其做出相应的解释,希望你看了以后针对唯一标示

MVC 3.0 在各个版本IIS中的部署

概述: 最近在做一个MVC 3的项目,在部署服务器时破费了一番功夫,特将过程整理下来,希望可以帮到大家! 本文主要介绍在IIS5.1.IIS6.0.IIS7.5中安装配置MVC 3的具体办法! 正文: IIS5.1 1. 安装Microsoft .net FrameWork 4.0安装包; 2. 安装ASP.NET MVC 3; 3. 在IIS中发布网站,创建虚拟目录,ASP.NET版本选择4.0.30196: 4. 添加MVC的解析: 右击IIS中的虚拟目录选择“属性”-“虚拟目录”-“配置”

Element-ui 2.8.0版本中提升表格性能,做了哪些事情,原理是什么

背景 项目中一直用element-ui,之前用el-table的时候,发现表格数据较多时,滑动表格就会很卡.我们的表格中只有200行数据,每行大概有30的字段,表格滑动就卡的不行.在Element-ui 2.8.0版本中,对表格性能进行了优化,链接.短短只有几行代码,却解决了表格的性能问题,今天我们来深度剖析,具体是怎么做到的. 先看改变的代码 代码很简单,增加了一个watch,watch中给当前hover的dom增加"hover-row' class,之前的dom移除'hover-row'.并

Cocos2d-X-3.0 之后的版本的环境搭建

 Cocos2d-X-3.0 之后的版本的环境搭建 由于cocos2d游戏开发引擎更新十分频繁,官方文档同步不够及时和完善.所以不要照着官方文档来照做生成工程. <点击图片就能进入网站> 具体的步骤: 1.获取cocos2d-X的源码v3.6版本 然后解压到随便什么位置,比如这里就放在桌面上,文件名cocos2d-x-3.6 2.使用5.1以上版本的XCode 3.将cocos2d-x-3.6中的setup.py直接拖到刚刚打开的终端,然后回车. 然后提示需要做一些环境变量的配置,第一个提示安

关于python3.4版本中的zip函数

特别注意: 在window,显示变量 print(x);而在linux中 print x 例如,有两个列表: >>>a = [1,2,3] >>>b = [4,5,6] 使用zip()函数来可以把列表合并,并创建一个元组对的列表. >>>zip(a,b) [(1, 4), (2, 5), (3, 6)] #注意在Python3.4版本中,显示 >>> zip(a,b)<zip object at 0x01FB2E90> 如