单一语境。多个GLSurfaceView和一个纹理

时间:2014-07-03 08:37:40

标签: android opengl-es glsurfaceview

是否可以在曲面视图中仅创建一个3D纹理,并在不同的曲面视图中使用相同的ID。在这里,我在3个表面视图中创建相同的纹理,并在内存中占用三倍的空间。是否可以为所有这些视图创建一个共同的纹理,并在这些视图中使用它?

1 个答案:

答案 0 :(得分:5)

是。有几种方法。

最简单的方法是对所有三个SurfaceView使用相同的EGL上下文。如果要在不同的SurfaceView上绘图,请使用eglMakeCurrent()更改EGLSurface。

稍微尴尬的方法是使用共享EGL上下文,您在最初创建第二个和后续EGL上下文时配置它。每个SurfaceView都有一个单独的上下文,但是它们都可以看到相同的纹理(以及其他一些内容;有关详细信息,请参阅EGL规范)。

您应该使用哪种取决于您的需求。您可以在Grafika中看到这两种方法的示例,但不是多个SurfaceView,它通常使用一个视图和一个MediaCodec输入表面。

使用普通SurfaceView比使用GLSurfaceView要容易得多,因为GLSurfaceView会为您处理大部分EGL上下文内务处理。 "显示+捕捉相机" Grafika中的活动使用与GLSurfaceView共享的上下文,但必须通过几个环节来实现目标。