ios - 跟踪 GPUImage processImage 的进度(iOS)

标签 ios iphone opengl-es gpuimage

我正在对静止图像应用 GPUImageKuwaharaFilter 滤镜。这是一个非常昂贵的操作,processImage 需要相当长的时间才能完成。我想向用户展示剩余 processImage 的进度。有什么方法可以实现吗?

由于近似进度可以完成工作,我尝试使用 NSTimer 并定期递增进度条。但是,由于某种原因,一旦我启动 processImage,NSTimer 就被阻止了。当 processImage 在后台运行时,有什么方法可以让 UI 和 NSTimer 保持空闲?

最佳答案

不幸的是,没有一种很好的方法来衡量单个着色器的进度。将着色器应用于带纹理的四边形实际上是一个原子操作,它要么成功要么失败(如果着色器花费的时间比 OpenGL ES 驱动程序看门狗允许的时间长)。确实没有通过图像渲染进行渐进的概念。

关于计时器,您可能会遇到的情况是,使用像这样的非常密集的着色器,它会有效地阻塞整个系统,直到它完成。它至少会导致界面出现严重故障,因为它需要在 GPU 进行任何其他类型的显示更新之前完成渲染。

除了改进着色器本身,我不知道解决这个问题的好方法。即使在桌面 GPU 上,该特定着色器也很慢,并且在 iPhone 5S 之前的设备上非常糟糕。在此操作的固定半径版本中粗略地尝试对其进行优化,但即使在那里我相信仍有改进的空间。

关于ios - 跟踪 GPUImage processImage 的进度(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315238/

相关文章:

iphone - 如何将 PDF NSData 绘制到 UIImage?

iphone - 使用 CGBitmapContextCreate 创建的图像作为 opengl 纹理

安卓NDK。从 .PVR 文件加载 ETC1 压缩纹理

iOS - 缓存如何工作?

objective-c - 从位于自定义 UITableViewCell 中的 UITextView 获取文本

ios - 在 UIWebView 中加载本地存储的图像

ios - 如何在运行时动态地在 nsmutable 数组中添加元素?

ios - 如何在两个 View Controller 之间传递字符串或数据对象?

iphone - tableView单元格高度...如何自定义它?

android - Android OpenGL ES 中的灰度颜色深度