2012-02-13 68 views
5

iOS 5では、OpenGL ESテクスチャキャッシュが導入され、バッファをコピーせずにカメラビデオデータからOpenGLに直接移動できます。テクスチャキャッシュの概要はsession 414 - Advances in OpenGL ES for iOS 5 of WWDC 2011です。glReadPixelsの代わりにglReadPixelsの代わりにOpenGL ESテクスチャキャッシュを使用してテクスチャデータを取得

この概念をさらに悪用し、単にテクスチャをロックしてバッファに直接アクセスすることによってglReadPixelsへの呼び出しを回避する面白いが見つかりました。

glReadPixelsはiPad 2で使用されているタイルベースのレンダラ(実際には1x1のテクスチャを使用している場合でも)のために実際には遅いです。しかしながら、記載された方法は、glReadPixelsより速く処理するように見える。

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

OpenGLはグラフィックスデータをCPUと並行して処理するので、OpenGLと通信することなくレンダリングが完了したら、CVPixelBufferLockBaseAddressはどのようにしてコールするべきですか?

答えて

4

上記のリンク記事とWWDC 2011のAppleのChromaKeyサンプルに基づいて、this answerでこれを行う手段について説明します。Appleがサンプルの1つにこれを使用し、彼らのOpenGL ESエンジニアから、私はこれがテクスチャキャッシュの有効な使用であると信じています。私が試したすべてのiOS 5.x互換デバイスで動作し、iOS 5.0と5.1でも動作します。 glReadPixels()よりはるかに高速です。

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

関連する問題