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

时间:2014-11-23 12:17:17

标签: android opengl-es

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

  

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

我有一个关于如何实施它的问题。

我是否需要创建GLSurfaceViewRenderer,我实际上并不想使用OpenGL在屏幕上绘制任何内容,因此我不确定是否需要它们?从我在网上看到的内容虽然为了设置OpenGL上下文而拥有这些内容似乎非常必要?任何人都可以给我这个指针吗?

1 个答案:

答案 0 :(得分:2)

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

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

    自{API}级别提供的EGL10包中的
  • EGL11javax.microedition.khronos.egl
  • {li> EGL14位于android.opengl包中,自API级别17开始提供。

它们非常相似,但较新的EGL14显然有更多功能。如果您的目标是至少API级别17,我会选择较新的版本。

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

eglInitialize
eglChooseConfig
eglCreatePbufferSurface
eglCreateContext
eglMakeCurrent

Android文档并未真正描述这些功能,但您可以在Khronos网站上找到实际文档:https://www.khronos.org/registry/egl/sdk/docs/man/