OpenGL和OpenGL ES的一些区别
(2014-03-20 11:08:44)
标签:
android |
OpenGL和OpenGL ES的一些区别
缺省,OpenGL ES使用双缓冲,这里是处理代码:
void CGLRender::SwapBuffers ()
{
eglSwapBuffers (iEglDisplay, iEglSurface);
}
因为内嵌设备的限制,OpenGL ES不能包括很多OpenGL的多余操作,如不能在OpenGL ES使用一个表明几何形式的临时模式。因此,如下代码在OpenGL ES是无效的:
glBegin (GL_TRIANGLES);
glVertex3f (0,1,0);
glVertex3f (-1,0,0);
glVertex3f (1,0,0);
glEnd();
OpenGL ES从vertex数组中渲染所有的几何模型。因此如果要在OpenGL ES中渲染一个三角形,需要如下代码:
const GLbyte KVertices []=
{
0,1,0,
-1,0,0,
1,0,0
};
;
...
glEnableClientState (GL_VERTEX_ARRAY)
glVertexPointer (3, GL_BYTE , 0, KVertices);
glDrawArrays (GL_TRIANGLES, 0, 3);
和大多数没有FPU(浮点运算处理器)的设备一样,OpenGL ES profile只定义了可以接收整型数值的函数。 整型运算是将浮点数用整数表示的一种技巧。当我们使用整型数时,这个整数会被分成2个部分:一个用来存储真正的整数部分,而剩余的用来存储小数部分。OpenGL ES工作在16:16的32位字节数上。它表明有16位是整数,而剩余的16位是小数。更多相关信息请参考here.
这里有是一个可接收整型或浮点型函数的示例:
glTranslatex (20 << 16, 0, 0, 1 << 16);
// same as
// glTranslatef (20.0f, 0.0f, 0.0f, 1.0f);
只能接收整型参数的函数,会有一个'x'后缀。此外,OpenGL ES还引进了GLfixed类型用来表示整型数。有一些值得一提的区别是:
- OpenGL ES中不存在哪些有所有的相同作用的,但有不同的缩写(如glVertex3{fsidv})的函数。但是有些如glColor4{fx}还是存在的;
- OpenGL ES只支持RGBA颜色模式(你不需要选择)
- OpenGL ES不绘制线框或点(只绘制实心填充);
- 无需询问OpenGL ES 1.0中的动态属性(如当前颜色);
- 没有GLU(OpenGL Utility Library),但可以找到GLU函数的内部完成,这些是OpenGL ES才有的;
- GL_QUADS, GL_QUAD_STRIP和GL_POLYGON是不支持的。