6

ゲームを書いていて、途中でカットシーンが欲しいです。ウィンドウ モードでは、DirectShow クラスは完全に機能し、簡単に使用できます。しかし、ゲームがフルスクリーンの場合、DirectShow でフルスクリーンのカットシーンを表示できません。

基本的に、D3D デバイスを初期化すると、IVideoWindow.put_Fullscreen(true) でもビデオを表示できません。私は、DirectShow が D3D デバイスでフルスクリーンを実行できないと推測しています。

そこで、カットシーンの再生中に D3D デバイスを解放し、その後再度初期化してみました。これはうまく機能しているように見えますが、DirectShow がフルスクリーンで再生されると、アプリのメイン ウィンドウからフォーカスが奪われ、終了しても元に戻らないようです。その後、DirectInput はデバイスの取得に失敗します (「アクセスが拒否されました」というエラー コードが表示されます)。取得前に SetForegroundWindow() を試してみましたが、直らないので結局問題ないのかもしれません。

とにかく、要するに、私が欲しいのは、D3D アプリの途中でフルスクリーンのカットシーンだけです。これを達成するための好ましい方法はありますか?DirectShow を D3D プライマリ サーフェスに出力することで、それを行うことはできますか? それは私が抱えている問題を解決すると思います。

4

2 に答える 2

2

Video Mixing Renderer 9 用のカスタム アロケーターを作成したいと考えています。独自のレンダラー フィルターを作成するよりもはるかに簡単で、特に D3D 相互運用のために作成されています。

Windows SDK に例があります。私はここにインストールされています:

C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\multimedia\directshow\vmr9\vmr9allocator

于 2009-12-07T06:14:11.393 に答える
2

「DumpFilter」を見てください。これを使用すると、D3D テクスチャに直接書き込むフィルターを簡単に作成できます。また、外部通信のインスタンス化をサポートする必要がないことに注意してください。クラスを単純にインスタンス化して使用できます。アプリケーションの外部に公開する必要はありません...

編集: DumpFilter は、DirectShow API の例の 1 つです。

于 2009-12-06T20:31:17.867 に答える