我可以在 Android 上拥有两个屏幕大小的乒乓帧缓冲区吗?

Posted

技术标签:

【中文标题】我可以在 Android 上拥有两个屏幕大小的乒乓帧缓冲区吗?【英文标题】:Can I have two ping-pong framebuffers of screen size on Android? 【发布时间】:2015-04-27 12:54:38 【问题描述】:

我需要在 android 上的 OpenGL ES 应用程序中有两个乒乓帧缓冲区。我还需要它们与设备屏幕大小相同。深度缓冲区和模板缓冲区都不会附加到它们,只有 RGBA8888 颜色缓冲区。

我打算用它们来添加一些 Photoshop 之类的混合模式(颜色加深、叠加等)

我可以在大多数现代(比如 Android 3.0、OpenGL ES 2.0 以上)设备上负担得起吗?如果不是,那为什么?以及如何确定我何时可以在创建之前创建它们?

【问题讨论】:

一般来说,可用内存随屏幕大小而变化。应用程序限制随着每个后续版本的增加而增加,以便能够处理越来越大的位图,并且 GLES 分配无论如何都不会计入该限制。分配一对全尺寸的帧缓冲区应该不是问题。 【参考方案1】:

我认为对于 Android 3.0 以上的设备,我认为这应该是相当安全的假设,我认为它们都应该运行 OpenGLES 2.0?

您的瓶颈将是内存(虽然我会想到这里不太可能用完)和您需要对这些缓冲区进行 ping pong 的任何事情的复杂性。我使用 OpenGLES 2.0 将this fluid simulation 移植到 Android,它严重依赖乒乓帧缓冲区来执行模拟更新。

我在三星 Galaxy S4 和 Nexus 7 (2012) 上有 6 个左右的全屏帧缓冲区,所有这些都创建得很好。我的问题是模拟本身非常复杂,这些设备无法执行。

我无法想象内存会成为 2 个全屏缓冲区的问题,而且性能可能还可以,具体取决于您向它们渲染的频率。

不确定这有多大帮助,因为这完全取决于您的使用情况。

当您尝试将 glFramebufferTexture2D 附加到您的 FBO 以检查设备是否可以处理它时,您能否只检查它返回什么?

【讨论】:

以上是关于我可以在 Android 上拥有两个屏幕大小的乒乓帧缓冲区吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何用android动画移动/改变对象的方向?

如何设置启动屏幕图标的大小?

如何在 Android 主屏幕上增加图标大小?

在 Android 上使用 FBO 进行慢速 OpenGL ES 渲染到纹理乒乓球

android上的设备特定屏幕捕获

android 活动的生命周期