0

CGRegisterScreenRefreshCallback(refreshCallback, NULL) を作成し、refreshCallback メソッドで、変更された四角形のリストを取得します。

OpenGL glReadPixels を使用して、frameBuffer から四角形のデータを取得しています。

opengl の有無にかかわらず、また OpenGL を使用してピクセルごとの読み取りをスキップできるスクリーン キャプチャのより良い方法はありますか?

glGetTexImage と glCopyTexSubImage2D を見てきました。これらの関数を使用して変更された四角形データを取得する方法を説明できる簡単なコード ブロックは非常に役立ちますか?

4

2 に答える 2

0

ピクセルを読み戻す最良の方法は、ピクセル バッファ オブジェクト (GL_PIXEL_PACK_BUFFER) をバインドし、glBufferData と null データ ポインタ (GL_STREAM_READ、重要!) で初期化してメモリを確保してから、glReadPixels を呼び出すことです。次に、次のフレーム中、つまりバッファーを交換した後、(できれば) glMapBuffer または (代わりに) glGetBufferSubData のいずれかです。

この手法により、glReadPixels がブロックされず、転送が可能な限り最高の転送速度で非同期に行われ、必要以上の余分なコピーが発生しないことが保証されます。

于 2011-02-28T21:25:43.717 に答える
0

キャプチャ スレッド -> HandlerThread

CaptureThread は CGRegisterScreenRefreshCallback を実行します -> コールバックは、長方形が変更されたことをハンドラー スレッドに通知します -> 必要に応じて、ハンドラー スレッドは長方形データのみを要求します。

この段階では、glReadPixels を使用して四角形データを読み取ります。

これを、変更された長方形からデータを読み取ることができるより高速な API に変更できますか? 変更される長方形が多数あり、画面の更新を何度もチェックするため、これは非常に高速です。

高速化するために設計を変更する必要がありますか?

于 2011-03-01T10:52:36.000 に答える