2012-01-11 14 views
1

私は、いくつかの事前に変換されたジオメトリを表示する簡単なDirectXアプリケーションを持っています。また、サイズを変更するとウィンドウがちらつくこともなく、図面がウィンドウサイズで伸びないようにします。フリッカーなしでDirectXウィンドウのサイズを変更するにはどうすればよいですか?

私がWM_SIZINGでデバイスをリセットすると、図面の実際のサイズが保持されるというストレッチの問題が発生しました。しかし、私はウィンドウのサイズを変更するたびにデバイスをリセットすると、高価な操作のように思えます。実際に私はdirectxを使っていくつかのシンプルなGUIを作っていましたが、ウィンドウのサイズを変更するとフロントバッファのデータが消去されてフリックするようです。それ、どうやったら出来るの?私は、WPFアプリケーションを管理しますどのようにそれを行うためにちらつきや描かれた要素の再配置せずにリサイズリアルタイムの効果を得ることができます方法はありません場合

また、私は、知っていただきたいと思いますか?

はまた、私はあなたがDirectXの使用GUI(非ゲーム)システムを設計した場合、それを聞きたいと他のアプリケーションは、あなたのオプションが何であるかそうであるようリサイズサポートを実装したいですか?

答えて

3

は、私はそれが

WM_ERASEBACKGROUNDと同様のメッセージを処理しないでくださいサイズを変更するとウィンドウがちらつくしないようにしたいです。 DirectXにすべての絵を残して、ちらつきがないでしょう。すべてのちらつきは、基本的にあなた(またはあなたのコントロール)が何かを描画してから、DirectXが描画を描画します。

また、図面がウィンドウサイズで伸びないようにしたい。

ない可能(少なくともハックなし)。 DirectX 9を使用していると仮定すると、デバイスを再初期化して解像度を変更する必要がありますが、それは遅いです。

たとえば、ビューポートの解像度が同じ(再初期化されていない)間、ビューポートで表示されるものがウィンドウサイズを反映するように、投影行列を変更するなどの回避策が考えられます。

つまり、ビューポートを640x480に初期化してそのまま維持しますが、ユーザーがウィンドウを1024x768にサイズ変更した場合は、640x480のビューポートに1024x768の容量をパックし、1024x768のウィンドウ。

これは、ビューポートのサイズを変更するという印象を与えるはずですが、スケーリングしているので画質は低下します。これは、ユーザーがウィンドウのサイズ変更を完了した後で、最後にビューポートを再初期化することが必要な理由です。こうすることで、最初にすばやくサイズを変更し、後で画質を向上させることができます。

関連する問題