12

我正在制作一个相机应用程序,这个应用程序将为用户提供一些过滤器。目前我的代码在 NDK 上,它工作正常,但是我想让它更快一点。看来 GPU 和 opengl Es 2.0 是要走的路。我对 GPU 的唯一担心是它们的内存限制。由于现代相机拍摄 5-10 mp 图像,而 GPU 内存限制远低于此。我想知道是否有办法解决这个限制。在我看来,唯一合乎逻辑的选择是将图像分割成更小的部分,然后在 GPU 上处理它们,最后将它们组合成最终图像。我的问题是,如果这种方法仍然对性能有好处,并且还有其他选项可以在移动 GPU 上处理高分辨率图像。

编辑:我需要澄清我想使用 GPU 进行图像处理,所以我的目标不是将结果呈现到屏幕上。我会将它渲染到另一个纹理并将其保存到磁盘。

4

2 回答 2

2

自从任天堂娱乐系统(Ricoh 2A03 频率为 1.79 MHz)以来,您的平铺想法就一直在使用,因此这是一个好方法。谷歌使用平铺来管理地图显示,甚至像孤岛危机这样的游戏也倾向于将大部分纹理的纹理大小限制为 1024x1024(1 兆像素)。是的,10 兆像素需要 30 兆的 RAM,因此某些设备可能会出现问题,特别是因为如果您使用源和目标纹理,这意味着需要 60 兆的 RAM。

请记住,纹理大小倾向于使用 2 的幂(2、4、8、16、32、64 等)。至少如果你把它切碎并平铺图像,你有时会得到更好的质量。

于 2012-10-16T12:44:49.107 回答
2

您不需要将实时过滤器应用到 10 mp 图像中......因为没有这样的显示器(或者也许有但在我们中间不流行)。:)

所以你只需要对正在显示的像素应用过滤器(1900x1280?)。您提到的平铺技术仍然适用于某些场景。延迟渲染就是这样一个例子。X-Box 360 每天都使用这两种技术(延迟平铺)。没有平铺就不可能,因为延迟技术的内存要求很高。

于 2012-10-16T22:04:30.067 回答