我在静止图像上应用了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/