OpenGl直接渲染位图(没有任何视图)

问题描述:

我需要将一些像素着色器应用到位图(使用OpenGL)并将结果发送到服务器。渲染应该在后台进行,所以我无法为此创建GLSurfaceView。所以我的问题是:是否可以在不使用GLSurfaceView的情况下在Android上进行OpenGL渲染?像直接渲染到位图,或画布或某种缓冲区/数组?或者可以通过它可以使用某种虚拟GLSurfaceView?OpenGl直接渲染位图(没有任何视图)

+0

[在后台运行Android OpenGL作为应用程序的呈现资源?]的可能的副本(http://stackoverflow.com/questions/6524212/run-android-opengl-in-background-as-rendering-resource-for-应用程序) – 2017-02-16 10:19:23

This SO post包含一个链接到an anddev post样本。有点向下,有人创建了一个PixelBuffer类,重用了GLSurfaceView.Renderer接口,但除此之外,只有EGL。

+0

幸运的是,我刚刚完成了基于相同想法的自己的渲染器。谢谢你的答案和链接思想。它对其他人可能有用。 – 2012-03-23 07:38:37

+0

提到的PixelBuffer对象确实包含了一个很好的概念证明,但它存在一个严重的性能问题:一旦缓冲区被渲染,位图的第二个副本就会通过在一个循环中复制每个像素而产生100%或更多运行时增加!只是表明将参考框架保持在OGL中是很重要的。 – tomwhipple 2012-06-21 00:56:25

+1

另外,PixelBuffer可以在一些手机上工作,但不能用于其他手机。耶破碎! – tomwhipple 2012-06-21 01:23:32

听起来你想渲染到帧缓冲区对象(即直接渲染到纹理)。这绝对有可能。只需在这里或网络上搜索答案即可。我发现这一个没有太努力。我不确定您是否使用GL ES 1.1或2.0。

http://blog.shayanjaved.com/2011/05/13/android-opengl-es-2-0-render-to-texture/

它也像在SDK APIDemos有1.1

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/FrameBufferObjectActivity.html

+0

谢谢你的答案。正如我所看到的,这两种方法都依赖于GLSurfaceView。我需要我的渲染没有任何屏幕/活动/布局可用。我的意思是在一些后台线程。我不知道GLSurfaceView是否能够创建GL上下文而不能初始化它的表面(因为它需要一个屏幕来绘制)。无论如何,谢谢你的提示,这似乎是有用的。 – 2012-03-21 15:18:33

+0

@boulder是否GLSurfaceView不初始化,如果它离开屏幕?如果在屏幕上显示1px,该怎么办? – 2014-03-02 22:12:11

+0

@BradMoore我现在不记得了。你可以很容易地检查这个。据我记得,没有屏幕就不能使用GLSurfaceView。 1px不是一个选项,因为渲染应该在服务上完成。 – 2014-03-04 13:05:12