【问题标题】:OpenGl render direcly to bitmap (without any view)OpenGL 直接渲染到位图(没有任何视图)
【发布时间】:2012-03-21 11:57:14
【问题描述】:

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

【问题讨论】:

标签: android opengl-es


【解决方案1】:

This SO post 包含指向an anddev post 的链接。往下看,有人创建了一个PixelBuffer 类,它重用了GLSurfaceView.Renderer 接口,但除此之外,只有EGL。

【讨论】:

  • 幸运的是,我刚刚基于相同的想法完成了自己的渲染器。感谢您的回答和链接想法。它可能对其他人有用。
  • 提到的 PixelBuffer 对象确实包含一个很好的概念证明,但它有一个严重的性能问题:一旦渲染缓冲区,通过在循环中复制每个像素来制作位图的第二个副本可能导致 100% 或更多的运行时间增加!只是表明在 OGL 中保持参考框架很重要。
  • 另外,PixelBuffer 可以在某些手机上运行,​​但在其他手机上不行。是的,碎片化!
【解决方案2】:

听起来您想渲染到帧缓冲区对象(即直接渲染到纹理)。这绝对是可能的。只需在此处或网络上搜索答案即可。我没有太努力就找到了这个。不过,我不确定您使用的是 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

【讨论】:

  • 感谢您的回答。正如我所看到的,这两种方法都依赖于 GLSurfaceView。我需要在没有任何可用屏幕/活动/布局的情况下进行渲染。我的意思是在一些后台线程中。我想知道 GLSurfaceView 是否能够创建 GL 上下文而无法初始化它的表面(因为它需要一个屏幕来绘制)。无论如何,谢谢您的提示,这似乎很有用。
  • @boulder 如果 GLSurfaceView 不在屏幕上,它是否不会初始化?如果它在屏幕上 1px 怎么办?
  • @BradMoore 我现在不记得了。你可以很容易地自己检查。据我记得,没有屏幕是不可能使用 GLSurfaceView 的。 1px 不是一个选项,因为渲染应该在服务中完成。
  • 这些链接现在无处可去 :(
猜你喜欢
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多