2013-01-17 66 views
6

我正在开发一个Android应用程序类型指画颜料。我正在使用OpenGL ES 2.0。基本上我有一个图像,其中每个触摸屏都应该对应一个圆alpha,以应用于显示下面的其他图像的位置。我尝试了不同的技术,但速度很慢,因为它的功能类似于使用有机glTexSubImage2D,这会减慢渲染阶段。我试图了解FBO的使用,因为它们允许离屏渲染。有人可以更好地解释屏幕上显示的内容,以及加速我的方法可以获得哪些优势?Android Opengl FBO屏幕外

我想在屏幕外意味着您可以更改由我创建的帧缓冲,onDrawFrame?在另一个线程?

回答

0

当您需要回读(部分)屏幕并将相同数量的数据重新写回到GPU内存时,您的方法会消耗大量内存带宽。这是非常缓慢的,并使您的绘图代码在渲染之前将图像移回到GPU之前等待。你有没有考虑为每个手指按压或某种类型的原始图形绘制四边形,以满足您的需求?为什么你需要OpenGL?

1

除了能够使用OpenGL ES 2.0渲染到屏幕上的窗口之外,您还可以渲染到名为 pbuffers(像素缓冲区的简称)的不可见的离屏幕表面。就像一个窗口一样,Pbuffers可以充分利用OpenGL ES 2.0提供的任何硬件加速功能 。 Pbuffers最常用于生成纹理贴图。如果所有你想要的 do渲染到纹理,我们建议使用帧缓冲对象(在第12章“帧缓冲对象”中涵盖 )而不是pbuffers,因为它们的效率更高,因为它们是 。但是,对于某些不能使用帧缓冲对象的情况,例如在使用OpenGL ES渲染离屏 表面,然后将其用作另一API(如OpenVG的 )中的纹理时,pbuffers仍可能有用。

[来源:OpenGL ES 2.0的节目指南]

我希望这有助于。请仔细阅读 - “使用OpenGL ES渲染到离屏表面时,pbuffers仍然很有用”

+0

但是,由于需要在两个EGL上下文之间切换,因此我已经提到pbuffer方法在Android上很慢。相反,搜索使用“framebuffer对象”作为屏幕外缓冲区的stackoverflow答案。 – ToolmakerSteve