OpenGL ES简介
OpenGLES(OpenGL for Embeded System)是OpenGL(Open Graphics Library)的精简子集,是以手持和嵌入式设备为目标的高级3D图形API,如现在火爆的智能手机,支持桌面系统,还是浏览器3D图形标准WebGL的基础,支持多个平台,如桌面端的Linux、Windows,移动端的Android、iOS等,无处不在。
OpenGL ES是Khronos组织创立的API套装之一,最新版本为OpenGL ES 3.0,且向后兼容OpenGL ES 2.0版本,过时的另外两个版本OpenGL ES 1.0和1.1(1.x版本不被2.0/3.0兼容)采用固定功能管线,分别从OpenGL 1.3和1.5衍生而来,且需要考虑一些限制,如屏幕分辨率、CPU性能、内存等。OpenGL ES 2.0采用可编程功能管线,从OpenGL 2.0衍生而来。OpenGL ES 3.0同样采用可编程功能管线,从OpenGL 3.3衍生而来,但引入了更多功能,如阴影贴图、volume渲染、基于GPU的粒子动画、几何形状实例化、纹理压缩、伽玛矫正等。
OpenGL ES与OpenGL相比,需要考虑下面几个因素:
(1)OpenGL API规模庞大且复杂,OpenGL ES工作组的目标是创建适合于受限设备的API,为了实现这一目标,工作组从OpenGL API中删除任何冗余,在相同操作可以多种方式执行的情况下,采用最实用的方法,将多余的技术删除,指定几何形状就是一个好的例子,在OpenGL中应用程序可以使用立即模式、显示列表或者顶点数组,在OpenGL ES中,只存在顶点数组,而删除了立即模式和显示列表。
(2)删除冗余是个重要的目标,但是维护与OpenGL的兼容性也很重要,OpenGL ES尽一切可能设计成可以运行用OpenGL功能的嵌入式子集编写的程序,这是一个重要的目标,因为这使得开发人员可以使用两套API并开发使用相同功能子集的应用程序和工具。
(3)引入新功能来处理手持和嵌入式设备的特定限制,例如,为了降低电源消耗,提高着色器的性能,在着色语言中引入精度限定符。
(4)OpenGL ES的设计者旨在确保实现图像质量的最小功能集,在早期的手持式设备中,屏幕尺寸有限,必须尽可能保证在屏幕上绘制的像素质量。
(5)OpenGL ES工作组希望确保任何OpenGL ES实现都能够满足图像质量、正确性和稳定性的某种可接受和公认的标准,这通过开发相关的相容性测试来实现,OpenGL ES实现必须通过这些测试才能被视为兼容。
URL字符编码
URL是由一串字符组成,这些字符可以是字母,数字和特殊符号。一个URL可以用多种方法来表现,例如:纸上的字迹,或者是用字符集编码的八位字节序列。URL的解释仅取决于所用字符的特性。在大多数URL方案中,都是使用URL不同部分的字符序列来代表因特网协议中所使用的八位字节序列。例如,在ftp方案中主机名,目录名和文件名就是这样的八位字节序列,它们用URL的不同部分代表。在这些部分里,一个八位字节数可以用这样的字符来表示:该字符在US—ASCII[20]编码字符集中的编码是这个八位字节数。另外,八位字节数可以被编成如下形式的代码:“%”后加两个十六进制数字(来自于“0123456789ABCDEF”),这两个十六进制数字代表了这八位字节数的值。(字符“abcdef”也可以用于十六进制编码)。如果存在下面的情况:八位字节数在US-ASCII字符集中没有相应的可显示字符,或者使用相应字符会产生不安全因素,或者相应的字符被保留用于特定的URL方案的解释,那么它们必须被编成代码。