私は CI ライブラリについてよく知りませんし、Apple のドキュメントにある関数の説明だけでは、グラフィックスや画像処理を扱ったことのない人には十分ではありません。
(カメラからの)各フレームを処理し、処理されたフレームに応じて変換された矢印で各フレームにオーバーレイを配置できる必要があります。その結果、CIImage を直接描画するのではなく、フィルターから毎回 CGImage を作成することは、リソースの無駄に思えます。iPhone 4S では、もう少しパフォーマンスが必要です。
したがって、[context drawImage] を使用して CIImage を直接描画する私の試行では、次の結果が得られました。
1)以下のような単純なUIViewでコンテキストを使用して描画しようとしました
[context drawImage:arrow inRect:overlayView.frame fromRect:arrow.extent];
矢印は、CIFilter から取得される有効な CIImage です。CGImageに変換すると投影されるので有効です。
コンテキストは次のようになります。
eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:eaglContext];
glkView.context = eaglContext;
glkView.delegate = self;
NSDictionary *options = @{kCIContextWorkingColorSpace : [NSNull null]};
context = [CIContext contextWithEAGLContext:eaglContext options:options];
overlayView が接続され、evr はそれで問題ありません。
2)その後、ViewControllerにデリゲートを設定して、GLKViewを使用してみました
- draw in rectが呼び出されます
- 基本的なopenglコードでglkviewの色を変更できます
*!! しかし、CGImageに簡単に変換できるサイズの有効な画像であっても、CIImageを描画することはありません
描画のコード (glkView: drawInRect 内) は同じです。
[context drawImage:arrow inRect:glkView.frame fromRect:arrow.extent];
いくつかの提案?