1

我正在尝试将 GPUImage 集成到我的应用程序中。具体来说,我想在我的主视图上应用球体折射滤镜。问题是,GPUImage 与 UIImage 一起使用,而不是与 UIView 一起使用。为了创建我的视图层次结构的 UIImage 表示,我使用 [CALayer renderInContext],这需要很长时间才能完成。最终结果是我的动画看起来很笨拙。

这是在我的 CADisplayLink 处理程序中调用的代码:

- (void)onDisplayLink:(CADisplayLink*)theDisplayLink {
  self.mainView.layer.opaque = YES;

  UIGraphicsBeginImageContextWithOptions(self.sphereView.bounds.size, self.sphereView.opaque, [[UIScreen mainScreen] scale]);
  [self.sphereView.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage* mainViewImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  self.sourcePicture = [[GPUImagePicture alloc] initWithImage:mainViewImage smoothlyScaleOutput:NO];

  self.sphereRefractionFilter = [[GPUImageSphereRefractionFilter alloc] init];
  self.sphereRefractionFilter.radius = 0.5;
  self.sphereRefractionFilter.refractiveIndex = 0.25;
  [self.sphereRefractionFilter setInputRotation:kGPUImageRotate180 atIndex:0];
  [self.sphereRefractionFilter addTarget:self.mainView];

  [self.sourcePicture addTarget:self.sphereRefractionFilter];

  [self.sourcePicture processImage];
}

我尝试使用此代码渲染的视图有一个背景图像,上面放置了大约 5-50 个较小的图像,它们的位置是实时修改的。想象一个球体,在不同的地方有多个移动标记。

使用此代码,我可以渲染大约 10 FPS。问题是:有什么方法可以更快地做到这一点?

任何人?

4

0 回答 0