2011-01-14 8 views
2

サイズが約320x200ピクセルの16個のDirect3Dデバイスを作成しました。私はIDirect3DDevice9 :: Presentを別のスレッドで各デバイスに40 msごとに呼び出す。 Windows XPおよび統合されたIntel GMA945グラフィックスのラップトップでは、システムツールチップまたはスタートメニューが表示されている場合、デバイスの一部が更新されません。 IDirect3DDevice9 :: Presentはその時点でエラーコードを返しません。すべてのプログラムで問題はないようですが、ユーザーは複数のデバイスの動きが凍っているのを見ることができます。その理由は何でしょうか?いくつかのDirect3DデバイスとIntel GMA945

これは、同じハードウェアのWindows 7とさまざまなハードウェアのWindows XPで正常に動作するため、この組み合わせでのみ問題が発生します。私は顧客がハードウェアとOSのこの組み合わせを使用しているので、これをサポートする必要があります。 MSDNでは、少なくとも1つのD3Dデバイス(少なくとも私はそれを見つけることはできません)を作成しなければならないということについて何も言及していないので、問題は他の場所にあるはずです。

私が見つけようとしていることは、おそらく、私の問題を解決する可能性のあるフラグの組み合わせがあるということです。現在のところ、私は次のものを使用しています:

D3DPRESENT_PARAMETERS param = {}; 
param.Windowed = TRUE;  
param.SwapEffect = D3DSWAPEFFECT_DISCARD; 
param.hDeviceWindow = GetSafeHwnd(); 
param.BackBufferCount = 1; 
param.BackBufferFormat = D3DFMT_UNKNOWN; 
param.BackBufferWidth = m_szDevice.Width; 
param.BackBufferHeight = m_szDevice.Height; 
param.MultiSampleType = D3DMULTISAMPLE_NONMASKABLE; 
param.Flags = D3DPRESENTFLAG_VIDEO; 
param.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 
param.MultiSampleType = D3DMULTISAMPLE_NONE; 
param.MultiSampleQuality = 0; 

答えて

1

私は数年間DirectXソフトウェアを配布してきましたが、インテルのグラフィックスチップセットには非常にうんざりなドライバが含まれていることが分かりました。私は一度クワッドを正しくレンダリングできなかったドライバのリビジョンを見ていました。だから、インテルのチップセットに問題がある場合、最新のドライババージョンを使用しているならば、あなたのソリューションを受け入れなければならないのは、「動作するまでショットガンのハッキングを開始する」だろうということです。

申し訳ありませんが、Intelのチップセットはうまく設計されていません。彼らはスクリーン上に、おそらくオフィスワーカータイプのために何かを得るためにそこにいるだけです。それを超えて "それはエアロガラスをする" Intelはおそらく、それが何をしているのか、それがどれくらいうまくいくのかを知らないだろう。とにかくアプリケーションを配布し、ハードウェア/ドライバのサポートの不具合によりIntelチップセットがサポートされていないと明記し、Intelに連絡して修正プログラムを入手できるかどうかを確認する方法もあります。

人々はOpenGLに悪いドライバがあると言う...

0

Intelグラフィックスチップ、特に統合されたGMAチップは、その能力で知られていません。彼らは、彼らが持っていなくて、後で失敗するか、エラーコードなしで(もしかしたらサポートされているシェーダーモデルがコンパイルに失敗したと思われるバグレポートを持っている)報告することができます。チップ/ドライバで同様の問題に遭遇している可能性があります。他のハードウェアや異なるドライバでも動作しますか?

私は、複数のデバイスを持っていることから、それらがウィンドウされていると仮定しますか?あなたは、ウィンドウハンドルをチェックしたか、または提示時にハンドル/ビューポートを明示的に渡してみましたか?いずれかのデバイスがリセットされますか?

ツールチップまたはスタートメニューが表示された後、ディスプレイドライバが正しくウィンドウを再描画しない可能性があります(ツールチップ/メニューの下にあるウィンドウの場合)。フォーカスのためにウィンドウをチェックして、ペイントされていることなどを確認しましたか?

+0

ウィンドウハンドルをチェックするとどういう意味ですか? –

+0

デバイスまたは現在のパラメータで使用される 'HWND '。言及した他のものと同様に、16個のデバイスは素晴らしいアイデアではありません。 – ssube

5

しないでください。デバイスは、基本的に1対1をGPUにマッピングすることになっています。 1つのデバイスを作成し、それを使って16種類の異なるウィンドウに描画します。いずれの方法でも動作します。

16個のデバイスを作成し、それらをパラレルにレンダリングしようとすると、に問題がないかと尋ねると、ただとなります。 D3Dは、常に1つのデバイスだけが深刻なレンダリングを実行することを想定して設計されています。

理論上、違いはパフォーマンスの問題でなければなりませんが、あなたのケースでは、偽のインテルGPUで16台のデバイスを並行して実行しようとすると、見ている。

+0

これは実際にはOSとハードウェアの1つの組み合わせでしか動作しないので、なぜ私はそれをしてはいけませんか? MSDNはそれに対して何も言わない。 16個の個別のデバイスを使用することで、プロジェクトのアーキテクチャがより明確になります。私はリファクタリングを大量にすることなくそれを変更することはできません。 –

+1

@Kirill:私はそれをすぐに見つけることができませんが、MSDN *はそれに対して何かを言っています(それが私がそれを学んだ場所です)。しかし、いつものようにMSDNでは、どこを見ているかを知る必要があります。私は時間があるときに私がそれを後で見つけることができるかどうかを見ます。 – jalf

1

まず、「その時点でエラーコードを返さない」と言うと、D3D9デバッグバージョンは最大デバッグレベルで実行していますか?

第2に、新しいデバイスを作成してフォーカスを得るたびに、既存のすべてのデバイスの表面が失われます。作成後にのリセットを呼び出していますか?

それ以外は、他の回答状態と同じです.1つのアプリケーションから多数のデバイスを作成しないでください。デバイスの作成では、9または10のデバイスの後でエラーをスローする可能性があります。実際には16でデバイスをプッシュしています。代わりに複数のスワップチェーンを持つ1つのデバイスを使用してください(例:DirectX 8チュートリアルを参照してください)。

+0

はい、私はデバッグバージョンでテストしました。そして、なぜ私は16デバイスを作成すべきではない、MSDNは何も言いません。 –

+0

@Kirill:エラーが発生しているため、実行しないでください。そうでない場合でも、16個のデバイスを処理できなかったGPUまたはドライバを見つけるまでに時間がかかるだけです。 ;) – jalf

関連する問題