実行中の 3D アプリケーションが占有する画面の一部で高速スクリーン キャプチャを行う自作アプリケーションを使用して、リアルタイムでムービーを生成したいと考えています。
このためのいくつかのアプリケーション (FRAPS や Taksi など) や専用の DirectShow フィルター (UScreenCapture など) が既に存在することは承知していますが、これを自分の外部アプリケーションで作成する必要があります。
正しくセットアップ (UScreenCapture + ffdshow) すると、全画面を圧縮してキャプチャしても、予想されるほど多くの CPU を消費せず (約 15%)、3D アプリのパフォーマンスを損なうことはありません。
外部アプリケーションからキャプチャを実行する際の問題は、3D アプリケーションが Vsync を失い、毛むくじゃらで使いにくい 3D アプリケーションを作成することです (3D アプリは画面の小さな部分にのみ表示され、残りは GDI、DirectX です)。
FRAPS は、一度に 1 つのアプリケーション (フォーカスのあるアプリケーション) のみをキャプチャできるようにすることで、この問題を解決します。使用されているテクノロジー (OpenGl、DirectX、GDI) に応じて、Vsync をフックし、摂動を乱すことなく (glReadPixels などを使用して) キャプチャを行います。これを行っても問題は解決しません。完全に構成された画面イメージ (3D などを含む) とスムーズな 3D アプリが必要だからです。
UScreenCapture は高速な DirectX 呼び出しを使用して画面全体をキャプチャしているようですが、openGL 3D アプリはまだ同期していません。
BitBlt の実行は遅すぎて、リアルタイムで 30 fps の取得を行うには CPU を消費します (少なくとも Windows XP では、7 ではわかりません)。
私の質問は、Windows 7 で私の目標を達成する方法があり、それがまったく新しい DirectX 合成エンジンであるかどうかを知ることです。
Windows 7 では、すべてのアプリのライブ VSynced 複製プレビューを (タスクバーに) 表示することに成功しているため、3D OpenGL アプリのレンダリングを乱すことなく、現在表示されている画面バッファーにアクセスする方法が必要です。
他の提案、技術はありますか?ありがとうございました