GL上下文是“重要的”吗?

时间:2011-09-17 01:44:05

标签: android opengl-es

在Android中,渲染器会在onSurfaceCreated,onSurfaceChanged和onDraw中传递GL10对象。 GL10的这个实际实例是否真的具有任何特定的重要性,或者您可以实例化您想要的任何GL10实例吗?

我问的原因是,我从不同来源收集了两条看似矛盾的信息:

  1. 我正在浏览gl2-android的源代码,这是一组ES 2.0绑定。在示例GL2Test.java中,传递的GL10实例被完全忽略。渲染器只是实例化AndroidGL20实例并使用它。

  2. 我一直在使用Robert Green的OpenGL动态壁纸代码。在他的介绍性博客文章中列出的许多评论中,有些人指出偶尔传递给onSurfaceCreated的GL10上下文会更改为其他实例。如果发生这种情况,如果您不首先使用新实例重新加载纹理,则绘图将失败。所以修复是在onSurfaceCreated的开始测试,以确保它是相同的GL10实例并从那里决定是否重新加载。 (您不希望每次都重新加载,因为onSurfaceCreated会在每次屏幕旋转时调用,必须由动态壁纸支持。)

  3. 我正在尝试做的是设置gl2-android以用于动态壁纸。但我想确保我能以一种安全的方式使用它,不受上面第2条中描述的问题的影响。

1 个答案:

答案 0 :(得分:1)

GL上下文是包含当前OpenGL实例的所有信息的对象。每当您创建纹理,顶点缓冲区,曲面,着色器或更改状态(混合模式,alpha等)时,所有这些都存储在上下文中。销毁上下文最终将破坏在该上下文中创建的对象并重置OpenGL的状态,从这个意义上说它们非常“重要”!

无论何时第一次创建新上下文或者在销毁前一个上下文之后(由于返回主屏幕,关闭显示或更改方向),都会调用

OnSurfaceCreated方法。这就是之所以你需要在此之后重新创建/上传所有资源的原因,因为上一个资源已被销毁并附加了所有资源。