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