使用带有UIView的GPUImage

时间:2012-10-22 18:17:28

标签: ios gpuimage

我正在尝试将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。问题是:有没有办法更快地做到这一点?

任何?

0 个答案:

没有答案