[已读]OpenGL、OpenGL ES、OpenVG、GLX、EGL简介
- 格式:docx
- 大小:15.40 KB
- 文档页数:2
glew,glee与gl,glu,glut,glx,glext的区别和关系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)。
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所使⽤的函数和常量声明。
一简介OpenGL ES (OpenGL for Embedded Systems) 是OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。
该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
OpenGL ES 是从OpenGL 裁剪定制而来的,去除了glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等许多非绝对必要的特性。
经过多年发展,现在主要有两个版本,OpenGL ES 1.x 针对固定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。
OpenGL ES 1.0 是以OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以OpenGL 1.5 规范为基础的,它们分别又支持common 和common lite 两种profile。
lite profile只支持定点定点实数,而common profile既支持定点数又支持浮点数。
OpenGL ES 2.0 则是参照OpenGL 2.0 规范定义的,common profile发布于2005-8,引入了对可编程管线的支持。
OpenGL ES 还有一个safety-critical profile。
二基本操作openGL 的原理图如上图所示。
命令从左边输入。
一些命令用来绘制几何物体,而其它命令则控制不同阶段如何对物体进行处理。
大多数指令可以在一个DisplayList中累积,以供GL稍后对其处理。
否则,命令将被送入一个处理管道。
第一阶段通过计算输入值的多项式函数,提供了一种估计曲线和表面几何特征的有效方法。
第二阶段根据点、线和多边形三类基本类型的图元的顶点属性进行操作。
在这个阶段,对顶点经过了形变和光照处理,原始点被处理成许多卷积,为下一阶段——光栅化做准备。
光栅化生产一系列的帧缓冲区。
OpenGL ES 概述作者:刘鹏日期: 2009-05-10本文对OpenGL ES 做了综合性的介绍,包括OpenGL ES 的由来、主要版本及其特点、OpenGL ES 与OpenGL 的主要区别等等。
简介2OpenGL_ES是khronos协会从OpenGL裁剪定制而来的,专为手机,游戏机等嵌入式设备而设计。
它的接口其实和Open GL很类似。
OpenGL_ES有几个主要版本,但对游戏开发来说,需要关注的只有两个:OpenGL_ES_1.x_和OpenGL_ES_2.x。
两者的特性和主要区别如下:OpenGL_ES_1.x 为固定渲染管线(Fixed_Function)而设计。
子版本包括:1.0,1.1。
1.0从OpenGL_1.3裁减而来;1.1从OpenGL_1.5裁减而来。
1.1向下兼容1.0。
经研究,1.1因为更先进,而且相比1.0增加的特性也都很有用,所以基本上不用考虑1.0了。
1.1和1.0的变化不算很大,应该芯片的价格也不会高出很多?1.1的技术规范参见:es_full_spec.1.1.12.pdf 或者es_cm_spec_1.1.12.pdf。
OpenGL_ES_2.x 为可编程渲染管线(Programmable)而设计。
目前只有2.0这一个子版本,从OpenGL_2.0裁减而来。
和1.x的区别是可以支持vertex和pixel shader,因此能够实现更多的特效。
另外2.0就不再支持1.x里面的固定管线功能了,也就是说2.x并不向下兼容 1.x。
技术规范参见:es_full_spec_2.0.22.pdf 或者:es_cm_spec_2.0.22.pdf。
OpenGL ES相对OpenGL删减了一切低效能的操作方式,有高性能的决不留低效能的,即只求效能不求兼容性。
比如没有double型数据类型,但加入了高性能的定点小数数据类型;没有glBegin/glEnd/glVertex,只能用glDrawArrays/glDraw......;没有实时将非压缩图片数据转成压缩贴图的功能,程序必须直接提供压缩好的贴图; OpenGL ES 与OpenGL 的区别3数据类型:1.i GLint 整数型2. f GLfixed 定点小数3.x GLclampx 限定型定点小数删除的功能:1.glBegin/glEnd2.glArrayElement3.显示列表4.求值器5.索引色模式6.自定义裁剪平面7.glRect8.图像处理(这个一般显卡也没有,FireGL/Quadro显卡有)9.反馈缓冲10.选择缓冲11.累积缓冲12.边界标志13.glPolygonMode14.GL_QUADS,GL_QUAD_STRIP,GL_POLYGON15.glPushAttrib,glPopAttrib,glPushClientAttrib,glPopClientAttrib16.TEXTURE_1D、TEXTURE_3D、TEXTURE_RECT、TEXTURE_CUBE_MAP17.GL_COMBINE18.自动纹理坐标生成19.纹理边界20.GL_CLAMP、GL_CLAMP_TO_BORDER21.消失纹理代表22.纹理LOD限定23.纹理偏好限定24.纹理自动压缩、解压缩25.glDrawPixels,glPixelTransfer,glPixelZoom26.glReadBuffer,glDrawBuffer,glCopyPixels其它注意事项:1.glDrawArrays等函数中数据必须紧密排列,即间隔为02.各种数据的堆栈深度较低OpenGL based Graphics : A state machine4It's a state machine - Setup the stage, lighting, actors... Then draw it. Sample OpenGL ES 2.0 program as following:// SetupHandle = get_platform_specific_window_handle();eglGetDisplay (handle);eglInitialize ();eglBindAPI (EGL_OPENGL_ES_API);eglChooseConfig ();eglCreateWindowSurface ();eglCreateContex ();eglMakeCurrent ();//Actorsfloat afVertices [] = {...};glEnableVertexAttribArray (0);glVertexAttribPointer (VERTEX_ARRAY, GL_FLOAT, GL_FALSE, afVertices); glDrawArrays (GL_TRIANGLE_STRIP, 0, 4);//ShoweglSwapBuffers (eglDisplay, eglSurface);。
OpenGL ES 2.0简单介绍OpenGL ES 和OpenGL 一样,是khronos 所维护、定义的免授权费、跨平台的3D Graphics API,不过和OpenGL 不同的是,OpenGL ES 主要是针对嵌入式系统(embedded system)的环境(像是手机、PDA);而近年来网页上的多媒体技术越来越複杂、多样化,也渐渐地需要用到3D Graphics 的硬体加速,所以也出现了基于OpenGL ES 2.0 而发展、直接在网页上做3D 显示的WebGL。
AD:OpenGL ES 和OpenGL 一样,是khronos 所维护、定义的免授权费、跨平台的3D Graphics API,不过和OpenGL 不同的是,OpenGL ES 主要是针对嵌入式系统(embedded system)的环境(像是手机、PDA).而近年来网页上的多媒体技术越来越複杂、多样化,也渐渐地需要用到3D Graphics 的硬体加速,所以也出现了基于OpenGL ES 2.0 而发展、直接在网页上做3D 显示的WebGL。
也由于OpenGL ES 所针对的环境一般来说效能都较差、有支援的功能也较少,所以OpenGL ES 的技术方面的进展会比OpenGL 来的慢、而且也有较多的限制。
目前OpenGL ES 有两个大版本,一个是基于OpenGL 1.3 1.5、使用「fixed function pipeline」的1.0 1.1,另一个则是基于OpenGL 2.0、使用「programmable pipeline」的2.x。
两者最大的差别,就在于OpenGL ES 2.0 移除了fixed function pipeline 的功能,而要使用透过vertex fragment shader 来实作的programmable pipeline。
上面两张图取自OpenGL ES 网站的fixed function pipeline 和programmable pipeline 的流程图。
opengl使用手册简书(原创实用版)目录一、OpenGL 简介二、OpenGL 函数库1.核心函数库2.矩阵操作、几何变换和投影变换函数3.交互式输入设备函数三、OpenGL 扩展库 GLEW正文一、OpenGL 简介OpenGL(Open Graphics Library)是一个跨平台的图形编程接口,用于渲染 2D 和 3D 图形。
OpenGL 提供了一套完整的图形渲染 API,可以实现各种视觉效果,如颜色、光照、阴影、纹理贴图等。
它广泛应用于游戏开发、计算机辅助设计、虚拟现实、科学可视化等领域。
二、OpenGL 函数库OpenGL 函数库包含许多可以用于绘制图形的函数。
这些函数可以根据其功能分为不同的类别,主要包括:1.核心函数库:这个库包含了 OpenGL 的基本功能,如绘制基本的几何图元(glBegin)、设置颜色(glColor3f)等。
2.矩阵操作、几何变换和投影变换函数:这个库包含了用于操作矩阵、实现几何变换和投影变换的函数。
例如,矩阵入栈(glPushMatrix)、矩阵出栈(glPopMatrix)、矩阵乘法(glMultMatrix)等。
3.交互式输入设备函数:这个库包含了用于处理交互式输入设备的函数,例如鼠标和键盘。
这些函数可以让用户在程序中进行操作,如点击、拖动、滚动等。
三、OpenGL 扩展库 GLEWGLEW(GL Extension Wrangler Library)是一个 OpenGL 扩展库,用于简化 OpenGL 扩展的加载和使用过程。
GLEW 提供了一系列的函数,用于查询、启用和禁用 OpenGL 扩展。
使用 GLEW,开发者无需关心扩展的加载和启用,只需关注功能的实现。
总之,OpenGL 是一套功能强大的图形编程接口,包含了丰富的函数库,可以实现各种复杂的图形渲染效果。
译文:OpenGL 简介OpenGL是一个底层图形库规范。
它为程序员提供了一个小的几何图元(点、线、多边形、图片和位图)库和一个支持2D/3D几何对象绘图命令库,通过所提供的图元和命令来控制对象的呈现(绘图)。
由于OpenGL的绘图命令仅限于画一些简单的几何图元(如点、线和多边形),所以OpenGL实用工具包(GLUT)应运而生,它能够帮助绘画出更复杂的三维对象(比如球体、圆环甚至茶壶)。
如果你要构建需要利用到OpenGL全部特性的应用的话,GLUT 未必适合,但是对刚学习OpenGL的人来说GLUT就非常有用。
GLUT是为满足windows系统下OpenGL程序独立编程接口的需求而设计的,接口被设计的非常简单而又实用。
从OpenGL中移除windows系统的操作是一个非常英明的决定,因为这意味着OpenGL图形系统能够被应用于更广泛的系统中(包括功能强大但昂贵的图形工作站以及需要大量图形运算的视频游戏、互动电视机机顶盒和个人电脑)。
GLUT简化了用OpenGL进行渲染的程序的实现。
GLUT应用编程接口(API)只需要调用很少的接口就可以用OpenGL来渲染图形场景,并且GLUT接口所需的参数也相对较少。
渲染管线大多数OpenGL实现都有着类似的操作顺序,这一系列的操作过程叫做OpenGL 渲染管线。
尽管OpenGL并不严格要求需要按照渲染管线这一顺序来实现,但是这样做可以为预测OpenGL下一步将要做什么提供可靠的指引。
几何数据(点、线、多边形)将会沿着一条依次通过求值器、顶点操作和装配阶段的路径进行传递,而像素数据(像素,图形,位图)将会沿着另一条路径传递,在最终像素写入帧缓冲区前,像素数据和几何数据都会经历相同的最后一步——栅格化处理。
Display Lists: 所有数据,无论是用来描述几何体还是像素的,都可以保存在一个display list中来在当下或将来使用(用以替代display list的用法是在需要时立即处理数据——称为立即模式)当一个display list被触发时,保存的数据就像立即模式一样被发送至显示器。
OpenGL ES入门一、前言OpenGL ES是Khronos Group创建的一系列API中的一种(官方组织是:/)。
在桌面计算机上有两套标准的3DAPI:Direct3D和OpenGL。
Direct3D实际上是运行在windows操作系统上的标准3DAPI,而OpenGL则是跨平台的,适用于Linux、多种UNIX、MAC OS X和windows。
由于OpenGL得到了广范围的认可,所以,基于嵌入式的3DAPI---OpenGL ES也就应运而生。
沃Phone使用的芯片高通7227,它能很好的提供对OpenGL ES的支持,了解OpenGL ES 的种种特性,不仅能开发出很好的适用于沃Phone的3D游戏、3D应用等。
借助于OpenGL ES的平台无关性,只要稍微修改EGL,理论上就可以将开发的3D游戏、3D应用移植到任何支持OpenGL ES的平台上去。
本篇文档就从零开始,深入简出,跟大家介绍一下OpenGL ES的原理和开发。
OpenGL ES简介什么是OpenGL ESOpenGL ES是一套适用于手持嵌入式设备的3DAPI。
比如手机、PDA、汽车、航空等等上面都可以使用到OpenGL ES。
OpenGL ES是免授权费的、跨平台的、功能完善的2D和3D 图形应用程序接口API,它是桌面OpenGL的子集,是从OpenGL裁剪定制而来的。
由于手持设备的相关局限性,OpenGL ES相对于OpenGL不可避免的进行了相关的精简。
去除了OpenGL中比如glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POL YGONS)等复杂图元等许多非绝对必要的特性。
但是OpenGL方面的很多知识,OpenGL ES都是可以借鉴的。
OpenGL ES其实是一个状态机(State machine),它保存一种状态直至其改变。
每个状态都有本身默认的缺省值,可以通过相关的查询和设置函数进行相关的查询和设置。
OpenGL的库函数介绍开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。
OpenGL库函数的命名方式非常有规律。
所有OpenGL函数采用了以下格式:<库前缀><根命令><可选的参数个数><可选的参数类型>库前缀有gl、glu、aux、glut、wgl、glx、agl等等,分别表示该函数属于OpenGL那个开发库。
从函数名后面中还可以看出需要多少个参数以及参数的类型。
I代表int型,f代表float型,d代表double型,u代表无符号整型。
例如:glVertex3fv()表示了该函数属于gl库,参数是三个float型参数指针。
我们用glVertex*() 来表示这一类函数。
OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。
从下图可以看出,核心库(gl)是核心,实用库(glu)是对gl的部分封装。
窗口库(glx、agl、wgl)是针对不同窗口系统的函数。
实用工具库(glut)是跨平台的OpenGL程序的工具包,比aux功能强大。
扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。
下面逐一对这些库进行详细介绍。
1.OpenGL核心库(GL)核心库包含有115个函数,函数名的前缀为gl。
这部分函数用于常规的、核心的图形处理。
由于许多函数可以接收不同数据类型的参数,因此派生出来的函数原形多达300多个。
核心库在Windows平台上的头文件为“GL.H”,库文件为“OPENGL32.LIB”,动态链接库为“OPENGL32.DLL”。
核心库可以在所有的OpenGL平台上运行。
核心库中的函数主要分为以下几类:●基本几何图元的绘制函数:glBegain()、glEnd()、glNormal*()、glVertex*();●矩阵操作、几何变换和投影变换的函数:如矩阵入栈函数glPushMatrix(),矩阵出栈函数glPopMatrix(),装载矩阵函数glLoadMatrix(),矩阵相乘函数glMultMatrix(),当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport();●颜色、光照和材质的函数:如设置颜色模式函数glColor*()、glIndex*(),设置光照效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial();●显示列表函数:主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glCallList()和glDeleteLists();●纹理映射函数:主要有一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*();●特殊效果函数:融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*();●光栅化、象素操作函数:如象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel();●选择与反馈函数:主要有渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer();●曲线与曲面的绘制函数:生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*() glEvalMesh*();●状态设置与查询函数:glGet*()、glEnable()、glGetError()。
egl的基本概念、api和用法一、基本概念EGL(EGL,全称Electronic Graphics Library)是一个用于处理图像和图形渲染的开源库。
它提供了一组用于渲染图形、图像处理、动画等功能的API,用于在各种平台上进行高效的图形渲染。
EGL 是OpenGL ES的底层接口,用于连接应用程序和图形渲染引擎。
它提供了一组跨平台、高性能的图形渲染功能,使开发者能够更轻松地实现高质量的图形应用程序。
二、APIEGL提供了丰富的API,用于处理图形渲染的各种任务。
以下是一些常用的EGL API:1. eglCreateImage:创建一个EGLImage对象,用于传输图像数据到渲染引擎。
2. eglBindBuffer:绑定缓冲区对象到特定的缓冲区类型,用于存储图像数据或传输数据。
3. eglTexImage2D:将图像数据传输到纹理对象,用于在渲染引擎中进行纹理映射。
4. eglSwapBuffers:交换前后缓冲区,实现双缓冲区的渲染效果。
5. eglCreateContext:创建OpenGL ES上下文,用于渲染图形。
6. eglMakeCurrent:将当前上下文与渲染引擎关联起来,以便进行渲染操作。
三、用法使用EGL进行图形渲染需要以下步骤:1. 初始化EGL环境:包括设置EGL窗口和渲染上下文等。
2. 创建EGLImage对象:使用eglCreateImage API创建EGLImage对象,并设置图像数据。
3. 绑定缓冲区:使用eglBindBuffer API将缓冲区对象绑定到特定的缓冲区类型。
4. 传输图像数据:使用eglTexImage2D API将图像数据传输到纹理对象。
5. 创建OpenGL ES上下文:使用eglCreateContext API创建OpenGL ES上下文。
6. 将上下文与渲染引擎关联起来:使用eglMakeCurrent API将当前上下文与渲染引擎关联起来,以便进行渲染操作。
OpenGL基本概念最近在做用OpenGL显示YUV数据的工作。
完成之后,决定将学到的东西整理总结一下。
在探索OpenGL的过程中,一篇英文的tutorial让我受益匪浅。
我自己的总结也将主要取材于此。
那篇tutorial的作者是个巴西人,其英文虽然语法不甚精湛,但文章可读性极好。
如果你英文还可以,强烈推荐读原文,比我这总结有用多了。
本文主要介绍OpenGL的基本概念。
OpenGL的组成OpenGL主要包括三个要素:•原件(Primitives)•缓冲区(Buffers)•光栅化(Rasterisation)原件原件包括点、线、三角形。
有的OpeGL版本还包括四边形,但在OpenGL ES(见文末说明)中只有这三种原件。
缓冲区包括三个概念:•帧缓冲区(Frame Buffers)•渲染缓冲区(Render Buffers)•缓冲区对象(Buffer Objects)帧缓冲区是GL储存渲染结果的地方。
它可以包含多个图像,也就是包含多个渲染缓冲区。
渲染缓冲区就是一个图像,例如颜色图像、深度图像、模版图像(决定每个位置是否可见的掩膜)等。
缓冲区对象就是程序员提供给OpenGL的数据,分为结构类和索引类的。
前者被称为“数组缓冲区对象”或“顶点缓冲区对象”(“Array Buffer Object”或“Vertex Buffer Object”),即用来描述模型的数组,如顶点数组、纹理数组等;后者被称为“索引缓冲区对象”(“Index Buffer Object”),是对上述数组的索引。
光栅化光栅化的过程就是根据缓冲区对象里提供的数据经过渲染从3D模型得到2D图像的过程。
得到的2D图像会根据帧缓冲区的配置来决定是直接送到屏幕显示或是做别的用处。
OpenGL的流水线从2.0版本开始,OpenGL支持可编程的流水线。
也就是说,程序员可以通过Shader(一种程序)来控制GPU渲染的过程。
Shader 分为Vertex Shader和Fragment Shader。
OpenGL、OpenGL ES、OpenVG、GLX、EGL简介今天研究了一些和图形处理相关的技术,其中遇到了一些让人费解的缩写,晚上我抽空整理了如下,希望对大家有点帮助。
(1)OpenGL、OpenGL ES、OpenVG:OpenGL是行业领域中最为广泛接纳的2D/3D图形API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。
OpenGL帮助程序员实现在PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
OpenGL ES是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,它针对多种嵌入式系统专门设计。
它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。
OpenGL ES包含浮点运算和定点运算系统描述以及EGL 针对便携设备的本地视窗系统规范。
OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。
OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程3D图形算法。
说白了,就是OpenGL的子集、可以应用于ES上。
OpenVG是针对诸如Flash和SVG的矢量图形算法库提供底层硬件加速界面的免授权费、跨平台应用程序接口API。
OpenVG现仍处于发展阶段,其初始目标主要面向需要高质量矢量图形算法加速技术的便携手持设备,用以在小屏幕设备上实现动人心弦的用户界面和文本显示效果,并支持硬件加速以在极低的处理器功率级别下实现流畅的交互性能。
(2)GLX、EGL:GLX是OpenGL Extension to the X Window System的缩写。
它作为x的扩展,是x协议和X server的一部分,已经包含在X server的代码中了。
GLX提供了x window system使用的OpenGL接口,允许通过x调用OpenGL库。
EGL接口介绍(转)2010-11-28 18:28EGL 是 OpenGL ES 和底层 Native 平台视窗系统之间的接口。
本章主要讲述OpenGL ES 的 EGL API ,以及如何用它创建 Context 和绘制 Surface 等,并对用于 OpenGL 的其他视窗 API 做了比较分析,比如 WGL 和 GLX 。
本章中将涵盖如下几个方面:λ EGL 综述λ EGL 主要构成( Display , Context , Configuration )λ在 Brew 和 Windows CE 上使用 EGLλ EGL 和其他 OpenGL 视窗系统的比较EGL 介绍EGL 是为 OpenGL ES 提供平台独立性而设计。
在本章中,你将详细地学习每个EGL API ,并了解使用 EGL 时候需要注意的平台特性和限制。
OpenGL ES 为附加功能和可能的平台特性开发提供了扩展机制,但仍然需要一个可以让 OpenGL ES 和本地视窗系统交互且平台无关的层。
OpenGL ES 本质上是一个图形渲染管线的状态机,而 EGL 则是用于监控这些状态以及维护 Frame buffer 和其他渲染 Surface 的外部层。
图 2-1 是一个典型的 EGL 系统布局图。
EGL 视窗设计是基于人们熟悉的用于 Microsoft Windows ( WGL )和 UNIX ( GLX )上的 OpenGL 的 Native 接口,与后者比较接近。
OpenGL ES 图形管线的状态被存储于 EGL 管理的一个 Context 中。
Frame Buffers 和其他绘制Surfaces 通过 EGL API 创建、管理和销毁。
EGL 同时也控制和提供了对设备显示和可能的设备渲染配置的访问。
EGL 数据类型EGL 包含了自己的一组数据类型,同时也提供了对一组平台相关的本地数据类型的支持。
这些 Native 数据类型定义在 EGL 系统的头文件中。
OpenGL、OpenGL ES、OpenVG、GLX、EGL简介今天研究了一些和图形处理相关的技术,其中遇到了一些让人费解的缩写,晚上我抽空整理了如下,希望对大家有点帮助。
(1)OpenGL、OpenGL ES、OpenVG:
OpenGL是行业领域中最为广泛接纳的2D/3D图形API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
OpenGL是独立于视窗操作系统或其它操作系统的,亦是网络透明的。
OpenGL帮助程序员实现在PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
OpenGL ES是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,它针对多种嵌入式系统专门设计。
它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。
OpenGL ES包含浮点运算和定点运算系统描述以及EGL 针对便携设备的本地视窗系统规范。
OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。
OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程3D图形算法。
说白了,就是OpenGL的子集、可以应用于ES上。
OpenVG是针对诸如Flash和SVG的矢量图形算法库提供底层硬件加速界面的免授权费、跨平台应用程序接口API。
OpenVG现仍处于发展阶段,其初始目标主要面向需要高质量矢量图形算法加速技术的便携手持设备,用以在小屏幕设备上实现动人心弦的用户界面和文本显示效果,并支持硬件加速以在极低的处理器功率级别下实现流畅的交互性能。
(2)GLX、EGL:
GLX是OpenGL Extension to the X Window System的缩写。
它作为x的扩展,是x协议和X server的一部分,已经包含在X server的代码中了。
GLX提供了x window system使用的OpenGL接口,允许通过x调用OpenGL库。
OpenGL 在使用时,需要与一个实际的窗口系统关联起来。
在不同平台上有不同的机制以关联窗口系统,在Windows上是WGL,在Linux 上是GLX,在Apple OS上是AGL等。
EGL则是OpenGL ES在嵌入式平台上(WGL,GLX,AGL)的等价物。
EGL假设OS会提供窗口系统,但EGL与平台无关,并不局限于任何特定的窗口系统,所有用到本地窗口系统的地方都用屏蔽指针来处理。
我觉得这就是它易于移植的关键。
(3)其它:
Mesa 3D是OpenGL的一个开源本的实现,支持3D硬件加速,和DRI都使用它作为OpenGL驱动。
DRI是Direct Rendering Infrastructure的缩写。
DRI是一个安全且有效率的直接对显示硬件存取的方法。
它包含对X server,一些client函数库、以及对内核的变更。
DRI的一个主要目的就是提供高效能的OpenGL支持。
详细:/xwindow/dri_intro.html
XGL项目由Novell发起,是一个X server架构,其设计意图在于通过OpenGL驱动充分发挥最新显卡的功能,支持所有X、OpenGL和XVideo的硬件加速。
该项目最初于2006年1月在中发布,但随后由于AIGLX的出现,在2008年1月被抛弃。
Xgl可以使用Xglx和Xegl作为后台的server。
作为其衍生品,compiz和Xgl是完全兼容的。
AIGLX是Accelerated Indirect GLX的缩写。
该项目由Red Hat和Fedora社区发起。
此处Indirect的含义在于:client端应用程序的OpenGL命令首先送给X server,再通过X server 调用显卡驱动层的OpenGL接口,这里X协议走的是GLX。
Xgl则是另外一种方式:建立一个OpenGL窗口,由OpenGL库直接调用显卡驱动。
7.1开始,已经加入了AIGLX。
Xglx是Xgl框架的一个后台server,但他仍然需要一个现有的x server,Xglx通过x server 的GLX创建OpenGL窗口,然后使用它,类似于Xnest;同时,Xglx还对x server做一些使用OpenGL显示和绘图的初始化操作。
尽管使用另外一个x server显得多余,Xglx却避免了和不同的图形硬件直接打交道。
Xegl是Xgl框架的另一个后台server,继承了Xglx中绘图相关的代码,但它对OpenGL 环境的初始化部分,调用的是EGL接口(而非Xglx使用的GLX)。
由于一些硬件的闭源驱动不提供支持EGL的接口,Xegl的开发有些停滞。
阿。