問題タブ [direct3d9]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - DirectX アルファ マスキング
私は DirectX 9 を使用してゲームに取り組んでいます。これが私がやろうとしていることです:
シーンがレンダリングされた後、その上にいくつかのスプライトをレンダリングしたいと思います。シーン全体の黒いカバーと、カバーに穴が必要な場所を示すマスクであるいくつかのスプライトです。これまでのところ、ブレンドモードをいじってみましたが、うまくいきませんでした。それを設定する私のコードは次のようになります。
各スプライトのアルファを乗算するのが最善の方法だと思いますが、http://msdn.microsoft.com/en-us/library/windows/desktop/bb172508%28v=vs.85%29.aspxによると、そのようなモードはありませんがサポートされています。これを行う別の方法はありますか?
Nico Schertler's answer に従って、私が思いついたコードは次のとおりです。
残念ながら、古いレンダー ターゲットを復元するとアプリがクラッシュします。何かアドバイス?
c++ - IDirect3DDevice9 デッドロックの解除
何が原因でしょうか? Windows 8 の dll から direct3d9 を使用しています。DllMain からの呼び出しはありません。
私のウィンドウの api と winapi へのすべての呼び出しは、同じスレッドから行われます。デバイスに関連付けられているすべてのリソースが解放されました。
winforms - VS2012 へのアップグレード後のデバッグ時にデッドロックとクラッシュが発生する
System.Windows.Forms.UserControl
私のアプリは、エフェクト フレームワークを使用して Direct3d9 レンダリングを行うネイティブ C++ クラスを拡張およびラップする C++/CLI クラスを使用します。ソリューションを VS2010 SP1 から VS2012 にアップグレードするまで、すべてがうまく機能していました。
実稼働マシンでは、アプリは以前よりも少し速く、うまく機能します。しかし、デバッグ時に、次の 2 つのエラーのいずれかがランダムに発生します。
LockRect
テクスチャへの呼び出しが永久にブロックされたままになるC:\Windows\SysWOW64\nvd3dum.dll
バージョンでアクセス違反が発生しました9.18.13.3182
。
Windows 7 Ultimate、64 ビット、すべての最新の更新プログラムを使用しています。デュアルヘッドNvidia GeForce 210 GPU(VGA出力から1つ、DVI-to-VGAアダプターを備えたDVIから1つ)によって供給されるデュアルモニターセットアップを使用しています。
これはグラフィック アダプターの問題のように思われるため、Nvidia ドライバーを最新バージョンにアップグレードすることしか考えられませんでした。これにより、エラーがさらに頻繁になり、開発ボックスがデバッグに使用できなくなりました。私の同僚も同様の環境にあり、この問題はまったく発生していません。
おそらくGPUに物理的な損傷がありますか?どうすればそれを確認できますか?これをトラブルシューティングするための他のヒントはありますか?
c++ - Direct3D9 BackBuffer から PixelArray へ
DirectX ゲームをフックしようとしています。フックを正常にロードし、次を使用して画像/バックバッファをディスクに保存できます。
無事に保存され、満足しています。ただし、ディスクではなくピクセル配列に保存したいと考えています。私は使用してみました:
ただし、ロックされることはなく、LR.pBits にアクセスしようとするとアクセス違反がスローされます。ロックしない理由がわかりません。バックバッファからバイト配列にピクセルを取得する別の方法はありますか? ゲームの最大ビューポートは 1366x768 です。
編集:私は試しました:
しかし、私のイメージは黒です。何か案は?
c++ - フルスクリーン Direct3D9 デバイスは、2 番目のモニターが接続されている場合、ネイティブ解像度でのみ表示されます
単一のモニターでは、私のプログラムはウィンドウ モードとフル スクリーン モードの両方で動作します (EnumAdapterModes から選択した任意の解像度を使用)。ただし、ネイティブ解像度 (1600 x 900) でのみシーンが表示されます。それ以外の場合は、以下に挙げる他の問題の中で画面が真っ黒になります。
これまでに発見したこと:
- この問題は、ウィンドウ モードまたはマルチヘッド モードでは発生しません。
- テクスチャにレンダリングすることもできます (ただし、表示するにはモードを切り替える必要がありました)
- すべての関数呼び出しは成功コードを返します (TestCooperativeLevel を含む)
- Clear または DrawPrimitive 関数を使用してバック バッファーに描画しようとするか、Present を呼び出しようとすると (まだ黒い画面が残ります)、GetRenderTargetData の呼び出しが失敗し、ボリューム テクスチャをロックしようとすると、サブ レベルで異なるスライス ピッチが返されます。
- Direct3D9 (Portal) を使用する商用ゲームでは、2 台目のモニターを接続した状態で解像度を切り替えるのに問題がないため、解決策があるはずです
この問題は、Direct3D9 ランタイムによって作成されたバック バッファーに関連しているようですが、私が思いつく唯一の解決策は、複数のモニターを備えたデバイスでマルチヘッド モードを強制することです。何かアイデアはありますか?
同じ問題を抱えているように見えますが、解決策がない質問:ディスプレイとは異なる解像度でフルスクリーン フレームをレンダリングするにはどうすればよいですか?
memory - Direct3d9 ロード テクスチャの失敗
私は一種の大きなプロジェクトに取り組んでいます。そして、プロジェクトの終盤で致命的な問題に直面しています。メモリリークかと思いますが、とにかく私の声を聞いてください。
プログラムを初めて起動すると、正常に動作します。約 1 時間再生し、次のシーンに移動します (これは、メモリからすべてのものを破棄し、メモリに新しいものをロードすることを意味します)。
というエラーログが表示されました
そんな感じ。
メッセージの後、テクスチャがなくなりました。つまり、(ゲーム内の)世界は黒です。テクスチャはありません。この問題はビデオ メモリ カードに関連していますか? 物理メモリ?または仮想メモリ?私はそれについて専門家ではありません。
誰でも私にヒントを与えることができますか?お願いします、何でも必要です。ありがとう。