混合OpenGL ES 1和OpenGL ES 2

时间:2012-03-19 04:30:27

标签: opengl-es

是否可以混合使用OpenGL ES 1和OpenGL ES 2?假设您正在使用在OpenGL ES 1中实现某些例程的库,而您现有的代码库是OpenGL ES 2.这样做的好方法是什么,假设它们在不同的渲染过程中呈现?

2 个答案:

答案 0 :(得分:4)

OpenGL ES 2.0不向后兼容OpenGL ES 1.x.根据定义,这意味着2.0与不兼容与1.x.在大多数情况下。

根据语言和与GL ES的绑定(您未说明),您可能可以重新编译为ES 1.x for ES 2.0编写的代码。或者初始化ES 2.0会导致所有GL功能都在那里路由。这意味着如果ES 1.x和2.0共享某个函数,则调用该函数的代码将调用初始化的任何GL ES版本。同样,你没有说出什么语言以及你如何初始化它。

ES中的某些功能在ES 1.1和ES 2.0中的工作方式大致相同。我会说纹理初始化和设置没有太大变化(你应该阅读规格看看有多少变化)。实际的数组绘图调用(glDrawArraysglDrawElements)或多或少相同。一些核心组件(如glViewportglDepthRangef等)也是相同的。

但是其他任何东西(如何使用顶点数组,立即模式等)都不同且不兼容。

答案 1 :(得分:4)

您可以在同一个应用程序中混合使用OpenGL ES 2.0和OpenGL ES 1.1,但不能使用单个上下文绑定混合来自两个不同API的命令。一旦在ES 2.0上下文绑定上发出ES 1.1 only GL命令,反之亦然,您的应用程序将崩溃,除非您意识到这一点,否则它将崩溃的原因并不明显。

创建上下文时,您必须选择正在使用的API,并在绑定上下文时发出的每个GL命令都坚持使用它。

因此,就在一个应用程序中混合使用这两个API而言,没有什么可以阻止您在一个线程上绑定ES 1.1上下文,并且在您拥有的同一个应用程序中的该线程上只发出ES 1.1调用。另一个线程上的ES 2.0上下文,只有在该线程上发布的ES 2.0命令。

但是,正如捉鬼敢死队的绅士们所说:“不要越过溪流!!”。