android - 如何处理 GPU 的内存限制以在 GPU 上进行高分辨率图像处理?

标签 android image-processing opengl-es-2.0 gpu

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

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

最佳答案

您的拼贴想法自任天堂娱乐系统以来就一直在使用,该系统具有 1.79 MHz 的 Ricoh 2A03,因此这是一个很好的方法。 Google 使用平铺来管理 map 显示,甚至像 Crysis 这样的游戏也倾向于将大部分纹理的纹理大小限制在 1024x1024(1 百万像素)之类的东西。是的,10 兆像素需要 30 兆内存,因此某些设备可能会出现问题,特别是因为如果您使用源纹理和目标纹理,则意味着需要 60 兆内存。

请记住,纹理大小往往使用 2 的幂(2、4、8、16、32、64 等)。至少如果你将它切碎并拼贴图像,你有时会获得更好的质量。

关于android - 如何处理 GPU 的内存限制以在 GPU 上进行高分辨率图像处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12689742/

相关文章:

python - 在 OpenCV 中使用 createTrackbar() 方法制作绘画应用程序时,EVENT_MOUSEMOVE 不起作用?

ios - 如何在 OpenGL ES 2.0 中独立操作对象?

java - 如何在 Android 应用程序中创建类似 gmail 撰写的东西

android - 通过热点获取连接设备的名称

opencv - Opencv中的单应矩阵?

iphone - OpenGl ES 2.0 和 GLKit : From GLKBaseEffect shaders to OpenGl

opengl-es - 使用 iOS 的 OpenGL ES 2.0 上的无缝立方体贴图?

java - 检查 android 模拟器是否静音

android - 使用Visual Studio在Flutter上运行Gradle时出错

image - 查找矩阵中元素的索引