我想在与此答案类似的设置中创建一个具有我可以管理的 OpenGL 纹理的SurfaceTexture。(此处引用:)
- 通过OpenGL创建纹理
- 将此纹理传递给新 SurfaceTexture 的构造函数。
- 将这个新的 SurfaceTexture 赋予相机。
- 确保您使用的是 OES_External(有关详细信息,请参阅文档)。
但是,创建 OpenGL 纹理(如答案的步骤 1 所示)需要EGL 上下文,这需要将 EGLSurface 设为当前,这需要 SurfaceTexture。似乎创建 EGL 上下文的唯一方法是创建一个 SurfaceView(或另一个具有 SurfaceTexture 的视图),并使用它来初始化 EGLSurface,然后使 EGLContext 成为当前的。
我的目标是创建一个 EGLContext 并使其在后台线程中成为当前的,对相机预览图像进行一些屏幕外计算(主要使用 NDK)。我想创建一个库,并使其尽可能独立于 UI。两个相关问题:
在 Java 方面,是否可以在没有预先创建 SurfaceTexture 的情况下创建 EGLContext?
在 NDK 方面,曾经有一个私有 API 调用来创建本机 windows android_createDisplaySurface()
,但它不再起作用了,而且,它是一个私有 API。有什么方法可以用 NDK 创建表面吗?
我对使用 EGL 还是很陌生,我不明白为什么需要 EGLSurface 才能使 EGLContext 成为最新。在 iOS 中,可以先创建 EAGLContexts,然后根据需要创建 framebuffers。使用 EGL,您似乎总是需要一个本机窗口。