問題タブ [direct3d12]
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.
direct3d - Direct3D プログラミングの初心者: 11 対 12
D3D プログラミングの初心者は、D3D12 を直接学習する必要がありますか、それとも D3D12 に飛び込む前に D3D11 が必要ですか?
ゼロから始めて、C++ の十分な知識があると仮定すると、どの方法を使用すればよいでしょうか?
c++ - GetCPUDescriptorHandleForHeapStart スタックの破損
DirectX 12.0 でプログラミングしているときに、かなり変わった問題に遭遇しました。これまでのところ、洞察に満ちた研究はありません。
C (C++ ではありません) を使用してプログラミングしています。公式の DirectX 12 ヘッダーは C と C++ の両方のバインディングをサポートしているように見えますが、C と同等のコードを記述して上記のタスクを実行するとクラッシュが発生しますが、C++ はそうではありません。エラーが私のものだとは思いません。
詳細は次のとおりです。D3D12 デバイスの初期化手順には、次のコード ブロックがあります。
ここで、hRTVは「レンダリング ターゲット ビューへのハンドル」(D3D12_CPU_DESCRIPTOR_HANDLE) を表し、 pRTVHeapは「レンダリング ターゲット ビュー ヒープへのポインター」(ID3D12DescriptorHeap) を表します。
これはC++の同等物です - これはうまくいきます:
コンパイル時のエラーはありませんが、実行時に C でこのメソッド (GetCPUDescriptorHandleForHeapStart) を呼び出すと、スタックの破損がトリガーされます (%ESP は 4 バイト分置き換えられます)。
メソッドの逆アセンブリを調べ、RET (リターン) 命令を書き留めました。
__stdcall
アセンブリと (願わくば) COM (コンポーネント オブジェクト モデル) オブジェクトの呼び出し規則に精通している人にとってthis
は、スタック上で渡される (または同等の) ポインターが最初のパラメーターです (この場合、唯一のパラメーターである必要があります)。これは、COM オブジェクトが独自のデータにアクセスできるようにする方法です。
次のコード スニペット (これも上に表示) は、私の混乱を招くものであり、当然のことながら、ランタイムが「スタック ポインターの位置合わせが正しくない/スタックの破損」(%ESP) エラーをスローする場合に、混乱を招きます。
この場合、1 つのパラメーターのみを渡す必要があります (this
ポインター)。ポインターのサイズ (32 ビット システム - 私のターゲット アーキテクチャは x86) は 4 バイト (32 ビット) ですが、呼び出し先がスタック上の 8 バイトをクリーンアップするのはなぜですか?
これをバグと呼ぶのは正しいですか?この問題について Microsoft に通知する必要がありますか? 私が間違っている?
お時間をいただきありがとうございます。私よりも多くの知識をお持ちの方に教えていただければ幸いです。CよりもC++を好むという古くからの議論を提案しないでください.
c++ - ID3D12GraphicsCommandList::Close() は E_INVALIDARG を返します
ここにある Direct3D12 の Rastertek チュートリアルに従っています。
すべてのコードが彼のものと同じであることを再確認しましたが、コマンド リストで問題が発生しています。バック バッファをクリアした直後にコマンド リストを閉じると、メソッドは をID3D12GraphicsCommandList::Close()
返しますE_INVALIDARG
。これは、コマンド リストの記録中に何か問題があったことを意味します。しかし、私がしていることは何も間違っているようには見えません。
私のプロジェクト全体は、この github ブランチにあります。
このコードの問題は何ですか?
リソースの障壁が問題のようですが、どちらかというと無害です。コメントアウトしOMSetRenderTargets()
てClearRenderTargetView()
もE_INVALIDARG
から返されClose()
ます。
ID3D12InfoQueue
また、インターフェイスを使用して、問題の原因を突き止めようとしました。エラーが返されたときにキューにメッセージがありません。他のエラーが発生したときにメッセージがClose()
表示されるため、インターフェイスが適切に機能していることを確認しました。
directx-12 - D3D11 CreateTexture2D に相当する D3D12 は何ですか?
私はdirect3dプログラミングが初めてで、d3d12で4つの画像を次々に表示する単純なWindowsアプリケーションを構築しています。私は D3D12 アーキテクチャの基本を理解しており、これまでに 4 つのコマンド アロケーター (backb バッファー サイズ = 4)、コマンド リスト、コマンド キュー、記述子ヒープ、およびフェンスを作成しました。また、WIC を使用してファイルから画像を読み込みました。画像のテクスチャ データをリソースとして作成する必要があることは、なんとなくわかっています。その部分はまだはっきりしていませんが、d3d12 で読み込まれた画像からテクスチャを作成する方法を明確にしたいと思います。
directdraw - DirectX 12 でどのようにテキストを描画しますか?
これは、 DirectX 11 でテキストを描画するにはどうすればよいですか?のフォローアップの質問です。
Direct3D-12 では、物事がはるかに複雑になり、それが新しいため、適切なライブラリをオンラインで見つけることができませんでした。
私は基本的な Direct3D12 FPS テスト アプリケーションを構築しています。レンダリングされた画像と共に FPS データを画面に表示したいと思っています。