GPUImage をアプリに統合しようとしています。具体的には、メイン ビューに Sphere Refraction フィルターを適用したいと考えています。つまり、GPUImage は UIView ではなく UIImage で動作します。ビュー階層の 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 でレンダリングできます。質問: これをより速く行う方法はありますか?
誰?