如何使用OpenGL而不显示它?

时间:2015-08-17 13:11:31

标签: android opengl-es background-process

对于应用程序,即使当前未显示应用程序,我也希望在后台渲染内容。官方文档编写通过GLSurfaceView打开GLcontext。为了不显示图形和渲染到另一个目标,似乎没有真正的解决方案。

所以问题是如何在Android中创建没有GLSurfaceView的GL上下文?

使用案例:录制视频并将当前时间作为文本直接添加到视频中。因为基于CPU的图像处理只是为了减慢现场执行速度。至少如果录制时也应该显示视频。 OpenGL可以将所有内容简单地渲染到Framebuffer / Renderbuffer中。

2 个答案:

答案 0 :(得分:4)

您不必使用GLSurfaceView来进行OpenGL渲染。如果查看source code,您会发现它仅使用公开的API。它只是一个便利类,它使Android下最常见的OpenGL使用(使用OpenGL绘制视图的内容)非常容易。如果您的用例不同,那么您就......不要使用它。

用于更直接地创建上下文和渲染表面的API是EGL。 Android Java框架中有两个版本:EGL10EGL14。 EGL10很老了,我强烈建议使用EGL14。

Android SDK文档中并未真正记录EGL调用,但您可以使用man pages on www.khronos.org查看已解释的调用。

直接使用EGL,您可以创建一个上下文和一个离屏渲染表面,使您可以在不使用任何视图的情况下使用OpenGL。

我发布了完整的代码,演示了如何在上一个答案中创建具有屏幕外渲染表面的上下文:GLES10.glGetIntegerv returns 0 in Lollipop only

答案 1 :(得分:0)

已经回答herehere

我认为最简单的是当他们说:

时在第二个链接中描述的内容

设置它的视图大小为1pixel& 1pixel,让它可见(用户无法看到它),并在OnDraw中将FBO绑定到主纹理并渲染它

所以你仍然会创建一个GLSurfaceView(只是为了得到一个上下文)但是你会把它变成1x1而不可见。

或者您可以使用我的评论中建议的半透明GLSurfaceView(我不确定这适用于任何设备,设置似乎有点棘手)。