OpenGL ES 1.0是专门针对嵌入式系统设计的3D图形库,它是从OpenGL 1.3发展而来的。它是OpenGL的一个子集,但也不仅仅是子集,还添加了OpenGL没有的一些内容。两者的主要区别如下:
★ 去掉了多余的API:
考虑到灵活性,OpenGL设计了大量不同的函数来完成同一件事情。比如 glColr(),就有30多种不同的形式,而区别仅在于参数的数量和类型不同。ES去掉了大部分这种API,仅留下了一些常用的和一般形式的。比如ES只支持glNormal3f, glColor4f, glMultiTexCoord4f。
★ 去掉了多余的功能
有时,OpenGL会有不同的方法来做同一件简单的事情。比如 glBegin()/glEnd()与顶点数组都可以用来设置顶点。ES只保留了最有效的顶点数组的方法。再比如,ES中对多边形只支持三角形;多边性mode也只有填充方式;不支持index color;只支持RGBA模式等。
★ 对代价大的功能做了限制
OpenGL的很多功能实现起来要花费较大的代价,但是又很重要,比如纹理贴图。ES中要么去掉它(去掉了对1D,3D纹理的支持),要么让它是可选的。
★ 去掉了一些数据类型:
大部分的嵌入式设备都不会使用浮点计算,因此ES去掉了对double类型的支持。因为OpenGL 1.3中有一些函数只接受double类型,这些函数就被改为接受float类型。例如:glTranslatef, glRotatef, glScalef, glFrustumf, glOrthof, glDepthRangef, glClearDepthf.
★ 精简了一些API所支持的数据类型
OpenGL有的函数可以支持多种数据类型,考虑到嵌入式系统的限制,ES定义了新的API,这些新的API只支持常用的几种数据类型。比如,OpenGL 1.3中的一些函数可以接收整数或short型,在ES中就改成只接收byte类型。
★ 去掉了对动态状态查询的功能
OpenGL的状态可以随时查询,但是实现起来比较复杂。考虑到它不是那么重要,ES中就只支持对静态状态的查询。
★ 没有GLU
留给厂商去自由设计以前GLU中支持的功能。
★ 设计了新的API来支持定点数
glNormal3x, glMultiTexCoord4x, glColor4x, glDepthRangex, glLoadMatrixx, glMultMatrixx, glRotatex, glScalex, glTranslatex, glFrunstumx, glOrthox, glMaterialx, glLightx, glLightModelx, glPointSizex, glLineWidthx, glPolygonOffsetx, glTexParameterx, glTexEnvx, glFogx, glSampleCoverage, glAlphaFuncx, glClearColorx, glClearDepthx.