2016-08-24 8 views
-1

SDL/OpenGl/DirectXまたは他のAPIを使用してバイナリ(RAW)形式で可能であれば、VRAMから画面に表示されるフレーム(画像)を取得します。VRAMからビデオ出力またはフレームを取得する方法

キャプチャ画面のレイテンシを最小限に抑え、イメージに保存してバイナリまたはbase64に変換したいと考えています。

答えて

1

フレームをVRAMから直接取得するのは、あまり良い方法ではありません。フレームがメモリ内でどのようにレイアウトされているかは、実装依存の点であるため、APIの関数を使用してそのイメージを取得する必要があります。

OpenGLでは、非同期転送の場合はglReadPixelsまたはPBOsを使用します。

+0

私は理解していますが、ネットワーク経由でこの画像を送信する必要があります。したがって、待ち時間を短縮し、リアルタイム転送を行うためには、私はそうする必要があります。 SDLの "SDL_RenderReadPixels()"関数は非常に遅いです。 –

+2

@hemantc:glReadPixelsによって待ち時間が長くなると思いますか? glReadPixelsによって同期ポイントが導入され、ドライバがglReadPixelsによって返される結果のレンダリングを終了し、可能な限り高速に返されるように、ドライバが最適化されているため、待ち時間が短縮されます。 PBOの主な目的は、レンダリングと転送をいつ、どのように完了するかを実装に与えることです(ペターのスループットを与えますが、実際にはglReadPixelの待ち時間を長くします)。 – datenwolf

+2

@hemantc:バッファスワップの前にglReadPixelsを実行することもできます。しかし、私はそれを "期限切れ"にしないことを強くお勧めします。つまり、スワップ前に終了すると主張できる場合にのみ転送を開始します。さもなければ期限を逃すかもしれません。 – datenwolf

関連する問題