我正在尝试将 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。问题是:有什么方法可以更快地做到这一点?
任何人?