加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

OpenGL和OpenGL ES的一些区别

(2014-03-20 11:08:44)
标签:

android

http://developer.nokia.com/community/wiki/OpenGL_ES简介#OpenGL.E5.92.8COpenGL_ES.E7.9A.84.E4.B8.80.E4.BA.9B.E5.8C.BA.E5.88.AB

 

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_STRIPGL_POLYGON是不支持的。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有