2014-11-23 84 views
0

我想在原始图像上进行图像处理而不在屏幕上显示(我想根据图像数据进行一些计算并在屏幕上显示一些结果。计算)我发现一个有趣的答案this question,如下所示:使用OpenGL进行图像处理 - 设置OpenGL上下文

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

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

我是否需要创建GLSurfaceViewRenderer,我实际上并不想使用OpenGL在屏幕上绘制任何东西,因此我不确定是否需要它们?从我在网上阅读的内容看,虽然看起来非常重要,但为了设置OpenGL上下文,还需要这些内容?任何人都可以给我这个指针?

回答

1

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

对于纯粹的离屏渲染,您可以使用EGL接口有点混乱的创建上下文,表面等,有两个版本在Android框架的完全不同的部分:

  • EGL10EGL11javax.microedition.khronos.egl包,由于在android.opengl包API级别1
  • EGL14可用,因为API级别可用17.

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

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

eglInitialize 
eglChooseConfig 
eglCreatePbufferSurface 
eglCreateContext 
eglMakeCurrent 

的Android文档并不能真正说明这些功能,但你可以找到在Khronos的网站上的实际的文件:https://www.khronos.org/registry/egl/sdk/docs/man/