6

iOS 5 では、OpenGL ES テクスチャ キャッシュが導入され、バッファをコピーする必要なく、カメラのビデオ データから OpenGL への直接的な方法が提供されました。WWDC 2011 のセッション 414 - Advances in OpenGL ES for iOS 5 でテクスチャ キャッシュの簡単な紹介がありました。

最後にこの概念をさらに悪用し、単にテクスチャをロックしてからバッファに直接アクセスすることで への呼び出しを回避する興味深い記事を見つけました。glReadPixels

glReadPixelsiPad 2 で使用されているタイルベースのレンダラーが原因で、(1x1 テクスチャのみを使用している場合でも) 非常に遅くなります。ただし、説明されている方法は よりも高速に処理されるようですglReadPixels

記事で提案された方法は有効であり、依存するアプリケーションを後押しするために使用できますglReadPixelsか?

CVPixelBufferLockBaseAddressOpenGL はグラフィックス データを CPU と並行して処理するため、OpenGL と通信せずにレンダリングが完了したことを呼び出しはどのように知る必要がありますか?

4

1 に答える 1

4

上記のリンク先の記事と WWDC 2011 の Apple の ChromaKey サンプルに基づいて、この回答でこれを行う手段について説明します。 ES エンジニアの皆さん、これはテクスチャ キャッシュの有効な使い方だと思います。これは、私が試したすべての iOS 5.x 互換デバイスで動作し、iOS 5.0 および 5.1 でも同様に動作します。よりもはるかに高速ですglReadPixels()

glFlush()ピクセル バッファのベース アドレスをいつロックするかについては、すべてのデータが FBO テクスチャにレンダリングされるまで、などを使用してブロックできるはずです。これは、テクスチャに裏打ちされた FBO から行った 30 FPS 1080p ムービー エンコーディングで機能するようです。

于 2012-03-20T20:59:52.023 に答える