2012-03-19 150 views
1

是否可以混合使用OpenGL ES 1和OpenGL ES 2调用?假设你正在使用在OpenGL ES 1中实现了一些例程的库,并且你现有的代码库是OpenGL ES 2.那么假设它们在不同渲染过程中渲染,那么这样做会是一个好方法吗?混合OpenGL ES 1和OpenGL ES 2

回答

4

OpenGL ES 2.0不向后兼容OpenGL ES 1.x.根据定义,非常多,这意味着2.0不是兼容与1.x.大部分。

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

ES中有一些功能与ES 1.1和ES 2.0的功能差不多。我会说纹理的初始化和设置没有太大的改变(你应该阅读规格,看看有多少改变)。而实际的数组绘图调用(glDrawArrays,glDrawElements)或多或少是相同的。而像glViewportglDepthRangef等一些核心组件是相同的。

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

4

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

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

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

但是正如捉鬼者们说的那样:“不要过河!”。