我正在开发Android应用程序类型的手指画。我正在使用OpenGL ES 2.0。基本上我有一个图像,其中每个触摸屏应该对应一个圆形alpha应用,其中显示位于下方的另一个图像。我尝试了不同的技术,但速度相当慢,因为它的功能就像使用有机glTexSubImage2D一样,减慢了渲染阶段。我试图了解FBO的使用,因为它们允许屏幕外渲染。有人可以更好地解释它是什么意思在屏幕外渲染以及可以获得哪些优势来加速我的方法?
我认为屏幕外意味着您可以更改我创建的帧缓冲区,而不是onDrawFrame?在另一个线程?
答案 0 :(得分:1)
除了能够使用OpenGL渲染到屏幕窗口之外 ES 2.0,您还可以渲染到不可见的屏幕外表面 pbuffers(像素缓冲区的缩写)。 Pbuffers可以充分利用任何硬件 加速可用于OpenGL ES 2.0,就像窗口一样。 Pbuffers最常用于生成纹理贴图。如果你想要的话 do是渲染到纹理,我们建议使用framebuffer对象(覆盖 在第12章“帧缓冲对象”中,而不是pbuffers,因为它们是 更高效。但是,对于某些情况,pbuffers仍然有用 无法使用framebuffer对象,例如在渲染屏幕外时 使用OpenGL ES进行表面处理,然后将其用作另一个API中的纹理 作为OpenVG。
[来源:OpenGL ES 2.0编程指南]
我希望这会有所帮助。仔细阅读 - “pbuffers对于使用OpenGL ES渲染到离屏表面仍然有用”
答案 1 :(得分:0)
当您需要读回(部分)屏幕并将相同数量的数据再次写回GPU内存时,您的方法会占用大量内存带宽。这非常慢,并且在渲染之前将图像移回GPU之前,您的绘图代码会等待。您是否考虑过每个手指按压的绘图四边形或某种符合您需求的原始图形?为什么你需要OpenGL?