服务中的OpenGL上下文丢失

时间:2015-10-02 18:27:32

标签: android opengl-es mediacodec egl

我继续工作,我引用了here并且遇到了一些障碍。我有一个VirtualDisplay,其Surface表示帧被写入,然后我使用相同的表面作为MediaCodec的输入,以便来自VirtualDisplay的帧是编码。这一切都发生在Threads中的Android Service NOT 中运行的某些Activity中。

我现在想要在链中添加一个中介Surface,以便进度VirtualDisplay - >写信给SurfaceA - >一些逻辑/特征 - >写信给SurfaceB - >编码SurfaceB

经过多次努力,我创建SurfaceA只使用直接的OpenGL和EGL调用,而不是使用GLSurfaceView.我使用this作为我应该如何做的一个例子从SurfaceA写到SurfaceB。根据我的理解,我在一个EGLSurfaces中只需要两个EGLContext

根据我的理解,GL上下文可能随时丢失,我可能需要重新创建我的OpenGL纹理(也可能是EGLSurfaces?)。这通常是通过GLSurfaceView处理的,但由于我没有使用它,是否有一种简单的方法可以知道上下文何时丢失?即使我的工作都不涉及GLSurfaceView或用户可见,我是否应该使用View?如果没有onPause,您如何为onResumeGLSurfaceView致电?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您想使用SurfaceTexture(a / k / a GLConsumer),它将到达Surface的帧转换为GLES纹理。它没有View组件。

GLSurfaceView是最糟糕的使用方法,因为它会在Activity暂停和恢复时创建并销毁其EGL上下文。 (EGL上下文不会丢失 - 它们会在被破坏时消失。如果您关心上下文的生命周期,请不要使用GLSurfaceView。)

可以在Grafika中找到SurfaceTexture使用的各种示例。您可以使用一个带有两个EGL表面的EGL上下文,或两个具有共享状态的单独EGL上下文。前者可能更容易。

另请参阅graphics architecture document