安卓Opengl FBO离屏渲染

7
我正在开发一款Android应用程序,类型为手指绘画。我正在使用OpenGL ES 2.0。基本上,我有一张图片,每个触摸屏幕都应该对应一个圆形alpha值,应用于显示在其下方的另一张图像中。我尝试了不同的技术,但是它们相当慢,因为它们使用类似于有机glTexSubImage2D的函数,这会减慢渲染阶段。我正在尝试理解FBO的用法,因为它们允许离屏渲染。有人能更好地解释一下什么是离屏渲染,以及可以获得哪些优势来加速我的方法吗?
我认为离屏渲染意味着您可以在onDrawFrame之外的线程中更改由我创建的帧缓冲区。
2个回答

2
除了使用OpenGL ES 2.0渲染到屏幕窗口外,您还可以渲染到非可见的离屏表面,称为pbuffers(像素缓冲区)。与窗口一样,pbuffers可以充分利用OpenGL ES 2.0中可用的任何硬件加速。 pbuffers通常用于生成纹理贴图。如果您只想渲染到纹理上,我们建议使用帧缓冲对象(在第12章“帧缓冲对象”中介绍),因为它们更有效率。但是,在某些情况下,pbuffers仍然可以很有用,例如当使用OpenGL ES渲染离屏表面,然后将其用作另一个API(如OpenVG)中的纹理时,无法使用帧缓冲对象。
希望这可以帮助您。请注意:“pbuffers仍然可以用于使用OpenGL ES渲染到离屏表面”。

1
然而,我看到有提到在Android上使用pbuffer方法会很慢,因为需要在两个EGL上下文之间切换。相反,可以搜索使用“framebuffer object”作为离屏缓冲区的stackoverflow答案。 - ToolmakerSteve

0
你的方法占用了太多的内存带宽,因为你需要读取(部分)屏幕并将相同数量的数据写回GPU内存。这样做非常缓慢,会导致你的绘图代码在图像被移回GPU之前等待。你是否考虑过为每个手指按压绘制四边形或某种近似你需求的基本图形?你为什么需要OpenGL来实现这个功能?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接