1

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 でレンダリングできます。質問: これをより速く行う方法はありますか?

誰?

4

0 に答える 0