我继续工作,我引用了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
,您如何为onResume
和GLSurfaceView
致电?
感谢您的帮助。
答案 0 :(得分:0)
您想使用SurfaceTexture(a / k / a GLConsumer),它将到达Surface的帧转换为GLES纹理。它没有View组件。
GLSurfaceView是最糟糕的使用方法,因为它会在Activity暂停和恢复时创建并销毁其EGL上下文。 (EGL上下文不会丢失 - 它们会在被破坏时消失。如果您关心上下文的生命周期,请不要使用GLSurfaceView。)
可以在Grafika中找到SurfaceTexture使用的各种示例。您可以使用一个带有两个EGL表面的EGL上下文,或两个具有共享状态的单独EGL上下文。前者可能更容易。