OPENGL到OPENGLⅠES翻译器和OPENGLⅠES仿真器制造技术

技术编号:2837256 阅读:221 留言:1更新日期:2012-04-11 18:40
由于缺乏基于OpenGL|ES标准的3D应用,期望在OpenGL|ES移动设备如蜂窝电话上运行基于OpenGL标准的3D应用。为解决此期望,必须能在OpenGL和OpenGL|ES间翻译函数调用。为支持此翻译和以便确保用于OpenGL应用继续执行的正确数据状态,存储可能被翻译期间使用的OpenGL|ES函数改变的全局GL状态。然后通过用适当OpenGL|ES命令代替OpenGL命令实施OpenGL到OpenGL|ES翻译,为OpenGL|ES实现传递OpenGL|ES  API。此后,恢复先前保存的全局GL状态,以致执行的翻译不会不利地影响OpenGL配置的应用继续执行。关于若干OpenGL  API和一些已知扩展,这种翻译过程支持OpenGL到OpenGL|ES翻译。

【技术实现步骤摘要】

本专利技术涉及使用OpenGL|ES图形标准用于移动设备(比如G4M类型的设备)的三维(3D)应用开发,具体地说,涉及用来允许在OpenGL|ES实现之上的OpenGL应用的运行的翻译器。
技术介绍
3D图形标准OpenGL常用于在个人计算机(PC)环境中的图形绘制。图形标准OpenGL|ES是把移动设备、比如移动电话和其它手机作为目标的OpenGL标准的清淡版本。尽管建立了OpenGL|ES标准,但存在一个问题即OpenGL|ES标准太新了以致在市场中基于该标准的3D应用非常少。但是,确实存在相当大数量的用OpenGL为个人计算机编写的遗留应用。直到更适合的基于OpenGL|ES标准的应用在市场上出现,消费者想要在他们的移动设备上有机会运行许多基于OpenGL标准的应用。然而,在OpenGL和OpenGL|ES之间的区别阻止这发生到任何消费者满意的程度,特别是对图形密集应用、比如3D游戏而言更是如此。在所有的基本OpenGL API(应用编程接口,有时称作命令)中,在OpenGL|ES中仅仅保留了约10%没有变化。在OpenGL|ES中保留了约50%的OpenGL API有微小变化,比如允许较少、不同或新的参数。剩余的基本OpenGL API在OpenGL|ES中根本不支持。关于基于OpenGL的应用和OpenGL|ES绘制引擎实现,对于OpenGL|ES完全支持的第一类的API,由OpenGL应用发送的相关命令能直接发送到OpenGL|ES图形绘制实现。然而,对于受限支持的OpenGL命令,例如其中仅仅支持受限的参数,以及对于根本不被支持的OpenGL命令,需要一些翻译工作以便能够在OpenGL|ES实现上正确地运行应用。Dylogic提供了被称作“DOGLESS”的翻译器程序,它把OpenGL调用翻译到OpenGL|ES并且把它们转发到底层的OpenGL|ES实现DLL。见http//sourceforge.net/projects/dogless。为了在OpenGL|ES实现上运行OpenGL应用,Dylogic的翻译器截取在OpenGL|ES中不支持的运行时OpenGL命令,并且试图通过使用支持的命令翻译这些命令。在图1的流程图中描绘了这种功能性。使用这种解决方案,一些OpenGL应用和游戏,包括类似Quake 2的图形密集游戏,能够在OpenGL|ES实现上正确地运行。然而,图1的Dylogic翻译器是概念证据产品并且仅仅翻译非常少量的OpenGL API。而且,与将在下文中更详细地讨论的一样,一些这些翻译是游戏相关的。例如,众所周知Dylogic翻译器对游戏Quake 2工作较好,但对于其它游戏却不好。为了提交多边形的顶点数据(坐标、颜色、法线……)以便绘制,OpenGL支持两种方式a)“立即方式”,其中在两个GL命令之间逐个顶点地发送数据glBegin/glEnd范例(如图5所示的示例);或b)为每个数据类型使用顶点数组。然而,在OpenGL|ES中,仅仅支持顶点数组方法。因为在单个命令中发送所有的图元数据,所以顶点数组更为有效。Dylogic翻译器工具几乎专门集中在glBegin/glEnd范例的翻译上。这示出在图2中。Dylogic翻译器解决方案把glBegin/glEnd范例翻译到顶点数组如下在glBegin命令中,通过使用命令glEnableClientState(其启用所有的用于颜色、法线顶点、纹理坐标的数组)激活所有的顶点数组。这完成了复杂图元到三角形的转换。然后通过汇编在命令glVertex、glColor、glTexCoord和glNormal中指定的数据来准备用于顶点数组的数据。随后,使用glEnd命令,把顶点数组传递到实现和使用APIglDrawArray来绘制对象。从Dylogic翻译器解决方案的回顾能容易地注意到有若干理由表明翻译工作太过简单了。首先,给定应用的需要(颜色、法线、纹理坐标),Dylogic解决方案启用用于顶点坐标、颜色、法线和纹理坐标的所有客户顶点数据数组指针以及把相关的数组传递到绘制引擎。这意味着在解决方案中使用无用的命令和数据,它会导致资源的浪费和性能的戏剧性丢失。其次,在Dylogic解决方案中,在glEnd命令中没有记录和恢复数组状态。这会出现存储器问题。第三,Dylogic解决方案没有考虑多个纹理。本领域技术人员会认识到OpenGL规范定义了可选的API,也被称作“扩展”,它由图形公司提出并且有时在规范中作为核心添加包括进来。大部分的最近流行的游戏使用这些扩展的一部分。遗憾的是,Dylogic翻译器解决方案根本不处理这些扩展。总之,Dylogic翻译器解决方案是不完整的解决方案,充其量只是非最佳的能够在顺应OpenGL|ES实现之上运行基本上所有(如果不是所有)的OpenGL应用。因此现有技术中需要这样的翻译器解决方案。
技术实现思路
根据本专利技术的实施例,在OpenGL和OpenGL|ES之间的翻译过程包括存储可能由在翻译期间使用的OpenGL|ES函数改变的全局GL状态;通过用OpenGL|ES命令代替OpenGL命令来翻译以得到OpenGL API;为OpenGL|ES实现传递OpenGL|ES API;以及恢复以前存储的全局GL状态。根据本专利技术的另一实施例,把在OpenGL中使用glTexGen命令的自动纹理坐标生成翻译到OpenGL|ES的方法包括在命令glTexGen的翻译之前存储纹理坐标数组状态和数据;使用在命令glTexGen中提供的信息,决定应该翻译哪一个纹理坐标元素(s,t,r,q)和应该实现哪一个翻译算法;实现选择的翻译算法以便计算纹理坐标元素(s,t,r,q);存储生成的纹理坐标数据;把含有存储的纹理坐标数据的glEnableClientState和glTexCoordPointer命令传递到OpenGL|ES实现;以及恢复前面存储的纹理坐标数组状态和数据。根据本专利技术的再一实施例,把在OpenGL中使用glTexGen命令的自动纹理坐标生成翻译到OpenGL|ES的方法包括截取包括指向顶点属性数据数组的指针的OpenGL glVertexPointer(或glVertex)、glNormalPointer(或glNormal)函数的调用;保存用于顶点坐标和法线数据的参数值;以及响应glTexGen命令,为每个顶点执行一个过程。该过程包括在目系中使用模型图矩阵计算顶点坐标;计算球面纹理坐标(s,t);激活纹理坐标数组;以及把指针数组发送到OpenGL。用于把在OpenGL中画出几何对象的glBegin/glEnd范例翻译成在OpenGL|ES中画出几何对象的顶点数组的过程包括存储GL状态和数组数据;把在OpenGL中的复杂图元四边形和多边形转换成在OpenGL|ES中画出的较小块的三角形;关于三角形为颜色、法线和纹理坐标准备必需的数组数据;在OpenGL|ES中根据数组数据作为对象绘制三角形;以及恢复以前存储的GL状态和数组数据。根据又一实施例,为了由OpenGL|ES支持用于翻译存储了一组gl命令和绘图命令的OpenGL API显示列表的方法包括截取glNewList调用以便创建显示列表;创建动态gl命令本文档来自技高网
...

【技术保护点】
一种在OpenGL和OpenGL|ES之间的翻译过程,包括:存储可能由在翻译期间使用的OpenGL|ES函数改变的全局GL状态;通过用OpenGL|ES命令代替OpenGL命令来翻译以得到OpenGLAPI;为O penGL|ES实现传递OpenGL|ESAPI;以及恢复先前存储的所述全局GL状态。

【技术特征摘要】
1.一种在OpenGL和OpenGL|ES之间的翻译过程,包括存储可能由在翻译期间使用的OpenGL|ES函数改变的全局GL状态;通过用OpenGL|ES命令代替OpenGL命令来翻译以得到OpenGLAPI;为OpenGL|ES实现传递OpenGL|ES API;以及恢复先前存储的所述全局GL状态。2.一种把在OpenGL中使用glTexGen命令的自动纹理坐标生成翻译到OpenGL|ES的方法,包括在所述命令glTexGen的翻译之前存储纹理坐标数组状态和数据;使用在所述命令glTexGen中提供的信息,决定应翻译哪个纹理坐标元素(s,t,r,q)和应实现哪个翻译算法;实现所选择的翻译算法以计算所述纹理坐标元素(s,t,r,q);存储所生成的纹理坐标数据;把含有所存储的纹理坐标数据的glEnableClientState和glTexCoordPointer命令传递到OpenGL|ES实现;以及恢复先前存储的所述纹理坐标数组状态和数据。3.如权利要求2所述的方法,其特征在于,决定还包括决定需要哪个纹理对象来生成所述纹理坐标。4.如权利要求2所述的方法,其特征在于,所述OpenGL|ES实现支持顶点数组。5.一种把在OpenGL中使用glTexGen命令的自动纹理坐标生成翻译到OpenGL|ES的方法,包括截取包括指向顶点属性数据数组的指针的OpenGLglVertexPointer(或glVertex)、glNormalPointer(或glNormal)函数的调用;保存用于顶点坐标和法线数据的参数值;以及响应所述glTexGen命令,为每个顶点执行以下过程在目系中使用模型图矩阵计算顶点坐标;计算球面纹理坐标(s,t);激活纹理坐标数组;以及把指针数组发送到OpenGL。6.如权利要求5所述的方法,其特征在于,还包括把含有来自所述纹理坐标数组的数据的glEnableClientState和glTexCoordPointer命令传递到OpenGL|ES实现。7.如权利要求6所述的方法,其特征在于,所述OpenGL|ES实现支持顶点数组。8.一种把在OpenGL中画几何对象的glBegin/glEnd范例翻译成在OpenGL|ES中画几何对象的顶点数组的方法,包括存储GL状态和数组数据;把在OpenGL中的复杂图元四边形和多边形转换成要在OpenGL|ES中画出的较小块的三角形;关于三角形准备用于颜色、法线和纹理坐标的必需数组数据;在OpenGL|ES中根据所述数组数据作为对象绘制所述三角形;以及恢复先前存储的GL状态和数组数据。9.如权利要求8所述的方法,其特征在于,转换复杂图元四边形和多边形包括测试用于OpenGL的方式是否为GL_QUAD_STRIP,并且如果是这样,则把OpenGL GL_QUAD_STRIP方式改为在OpenGL|ES中的GL_TRIANGLE_STRIP方式。10.如权利要求8所述的方法,其特征在于,转换复杂图元四边形和多边形包括测试用于OpenGL的方式是否为GL_QUADS,并且如果是这样,则把OpenGL GL_QUADS方式改为在OpenGL|ES中的GL_TRIANGLES方式。11.如权利要求8所述的方法,其特征在于,转换复杂图元四边形和多边形包括测试用于OpenGL的方式是否为GL_POLYGON,并且如果是这样,则把OpenGL GL_POLYGON方式改为在OpenGL|ES中的GL_TRIANGLE_FAN方式。12.如权利要求8所述的方法,其特征在于,准备包括从OpenGL命令glVertex、glColor、glNormal和glTexCoord收集数组数据。13.如权利要求8所述的方法,其特征在于,绘制包括使用OpenGL|ES glDrawArray或glDrawElements命令绘制所述三角形。14.如权利要求8所述的方法,其特征在于,还包括截取指向顶点属性数据数组的OpenGL指针;保存与所截取的指针相关的参数值;以及在所述glBegin/glEnd范例内,用OpenGL|E...

【专利技术属性】
技术研发人员:C夸尔李海珍陈国基
申请(专利权)人:意法半导体研发上海有限公司
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有1条评论
  • 来自[北京市电信互联网数据中心] 2015年03月31日 08:38
    翻译是在准确、通顺的基础上,把一种语言信息转变成另一种语言信息的行为。翻译是将一种相对陌生的表达方式,转换成相对熟悉的表达方式的过程。其内容有语言、文字、图形、符号的翻译。其中,“翻”是指对交谈的语言转换,“译”是指对单向陈述的语言转换。“翻”是指对交谈中的两种语言进行即时的、一句对一句的转换,即先把一句甲语转换为一句乙语,然后再把一句乙语转换为甲语。这是一种轮流的、交替的语言或信息转换。“译”是指单向陈述,即说者只说不问,听者只听不答,中间为双语人士,只为说者作语言转换。
    0
1