0

CIFilter の CIImage を表示する GLKView があります。ピンチ ジェスチャでビュー フレームのサイズを変更すると、フレーム レートが低くなります。この背後にある問題は何ですか?どうすればフィットしますか?

4

1 に答える 1

1

この API の仕組みにより、サイズ変更時に新しいフレーム バッファが作成される可能性があります。カスタムビューでこれを行うことは可能であるため、「GLKViewを使用しないでください」が答えになります。openGL にバインドされたカスタム ビューを引き続きスケーリングすると、ズームを表示するためにスケーリングしたときに解像度が低下します。

何をしているのかについての情報が少なすぎましたが、一般的には、openGL でスクロール ビューを使用するようなものに思えます。描画されたビューの上にスクロール ビューを追加することでこのようなシステムを実装し、その相互作用をリッスンしました (スクロールしたか、ズームしたか)。次に、スクロール ビューのコンテンツ ビューの可視四角形を計算し、同じ四角形を openGL プロジェクション マトリックスで使用しました。orthoこれは、可視フレーム パラメータを使用して呼び出しているだけです。

したがって、一般的には、より大きなバッファーが必要になるため、レンダリング先のビューを単純にスケーリングしたり、ズームしたりしないでください。バッファがビューから作成されると、ビュー自体に設定したコンテンツ スケール (@2x、@3x) を掛けたものと同じサイズになります。したがって、ズームすると、実際にビューがスケーリングされ、新しいサイズにサイズ変更されますが、これには時間がかかります。ただし、サイズを変更しないと、解像度が失われます。したがって、私が見てきたことから、射影行列を変更することが道であり、スクロールビューからデータを転送することはかなり可能であるため、すべての跳ね返り効果などを得ることができます。

すでに表示リンクを使用している場合 (対話に関係なくビューを再描画し続ける)、スクロール ビュー イベントをリッスンする必要はありません。描画するすべてのフレームで、スクロール ビューの可視 rect を取得するだけです。これにより、一部のコードが削除されます。

于 2016-03-07T10:35:00.937 に答える