Android 使用OpenGL进行图像处理-设置OpenGL上下文

Android 使用OpenGL进行图像处理-设置OpenGL上下文,android,opengl-es,Android,Opengl Es,我想在不在屏幕上显示的情况下对原始图像进行图像处理(我想根据图像数据进行一些计算,并根据这些计算在屏幕上显示一些结果)。我找到了一个有趣的答案,如下所示: 在GPU上进行实际处理:设置OpenGL上下文(OpenGL 并在该上下文中创建SurfaceTexture对象。 然后将该对象传递给setPreviewTexture,然后开始预览。那么, 在OpenGL代码中,可以调用SurfaceTexture.UpdateMaximage,然后 与SurfaceTexture关联的纹理ID将更新为 来

我想在不在屏幕上显示的情况下对原始图像进行图像处理(我想根据图像数据进行一些计算,并根据这些计算在屏幕上显示一些结果)。我找到了一个有趣的答案,如下所示:

在GPU上进行实际处理:设置OpenGL上下文(OpenGL 并在该上下文中创建SurfaceTexture对象。 然后将该对象传递给setPreviewTexture,然后开始预览。那么, 在OpenGL代码中,可以调用SurfaceTexture.UpdateMaximage,然后 与SurfaceTexture关联的纹理ID将更新为 来自摄影机的最新预览帧。您还可以读回 将RGB纹理数据发送到CPU,以便使用glReadPixels进行进一步处理, 如果需要的话

不过,我有一个关于如何着手实施它的问题


我是否需要创建
GLSurfaceView
渲染器
,我实际上不想使用OpenGL在屏幕上绘制任何东西,所以我不确定是否需要它们?从我在网上读到的内容来看,为了设置OpenGL上下文,似乎有必要使用这些工具?有人能给我一些建议吗?

你不必使用
GLSurfaceView
GLSurfaceView
是一个纯粹用Java编写的方便类。它简化了希望在Android中使用OpenGL渲染的应用程序的设置部分,但其所有功能也可以通过Android框架中的低级接口获得

对于纯屏幕外渲染,您可以使用EGL接口创建上下文、曲面等。令人困惑的是,Android框架中有两个完全不同的版本:

  • javax.microedition.khronos.egl
    包中的
    EGL10
    EGL11
    ,从API级别1开始提供
  • android.opengl
    包中的
    EGL14
    ,从API级别17开始提供
它们非常相似,但较新的
EGL14
显然有更多的特性。如果您的目标至少是API级别17,我会选择较新的版本

使用
EGL14
类中的方法,然后可以创建上下文、曲面等。对于屏幕外渲染,一个选项是创建用于渲染的Pbuffer曲面。要完成设置,您通常会使用以下功能:

eglInitialize
eglChooseConfig
eglCreatePbufferSurface
eglCreateContext
eglMakeCurrent
Android文档并没有真正描述这些功能,但您可以在Khronos网站上找到实际的文档: