問題タブ [directx-11]

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.

0 投票する
1 に答える
9459 参照

directx - プログラムによる directx 11 テクスチャの作成、3 つの異なる方法の長所と短所

msdnのドキュメントでは、directx 11 では、directx 11 テクスチャをプログラムで塗りつぶす方法が複数あると説明されています。

(1) デフォルトの使用テクスチャでテクスチャを作成し、メモリからのデータで初期化します

(2)動的な使用法でテクスチャを作成し、DeviceContext Mapを使用してテクスチャメモリへのポインタを取得し、それに書き込み、Unmapを使用して完了を示します(その時点でGPUにコピーされたと思います)

(3) ステージングを使用してテクスチャを作成し、動的テクスチャの場合と同じ手順に従いますが、ID3D11DeviceContext.CopyResource を呼び出して、このステージング テクスチャを使用して (不変でない) デフォルトまたは動的テクスチャを塗りつぶします。

ただし、ドキュメントには各方法の長所と短所がまったく説明されておらず、私はまだ directx に慣れていないため、まったく明確ではありません。

directx 11 でプログラムによってテクスチャを作成するこれらの方法のそれぞれの長所と短所は何ですか?

補足:ステージング テクスチャのコンテキストでは、GPU からの読み取りはバッファリングされないため、独自のダブル バッファリングを行う必要があることを読みました。しかし、これが正確かどうか、ステージング テクスチャを使用した書き込みに適用されるかどうか (または、それが実際に何を意味するか) はわかりません。

2 つ目の注意事項: Map メソッドのドキュメントには、サブリソース内のデータへのポインターを取得し、そのサブリソースへの GPU アクセスを拒否すると記載されています。基になるデータが Map によって呼び出されたテクスチャに GPU がアクセスしたい場合、GPU は何をしますか? ストール?(これは私が尋ねた長所と短所の一部のように聞こえるので、私は尋ねます)

0 投票する
2 に答える
5563 参照

graphics - directxの多くのさまざまな複雑なオブジェクトの典型的なレンダリング戦略は?

私はdirectxを学んでいます。それは物事を行う方法に大きな自由を提供しますが、おそらく異なるステートジーは異なるパフォーマンスを発揮し、パフォーマンスの良い使用パターンが何であるかについてのガイダンスはほとんど提供しません.

directx を使用する場合、レンダリングごとに新しいデータの束を複数回スワップする必要があるのは一般的ですか?

最も明白で、おそらく非常に非効率的な使用方法は、次のようになります。

戦略1

レンダリングごとに

  1. モデル 0 (テクスチャを含む) のすべてを読み込み、レンダリングします (IASetVertexBuffers、VSSetShader、PSSetShader、PSSetShaderResources、PSSetConstantBuffers、VSSetConstantBuffers、Draw)

  2. モデル 1 のすべて (テクスチャを含む) を読み込み、レンダリングします (IASetVertexBuffers、VSSetShader、PSSetShader、PSSetShaderResources、PSSetConstantBuffers、VSSetConstantBuffers、Draw)

  3. 等...

ロードする最大のものに専用スロットが与えられている場合、部分的にこれをより効率的にできると思います。たとえば、モデル 0 のテクスチャが非常に複雑な場合は、各ステップでそれをリロードせず、スロット 1 にロードしてそのままにしておきます。そこの。もちろん、DX11 の各タイプに確実に存在するレジスタの数がわからないので、これは複雑です (誰かがそれに関するドキュメントを指摘できますか?)

策略2

いくつかのテクスチャ スロットをロード用に選択し、他のものを最も複雑なテクスチャの永久保存用に選択します。

一回だけ

最も複雑なモデル、シェーダー、テクスチャーを永久ストレージ専用のスロットにロード

レンダリングごとに

  1. ロード用に確保したスロットを使用して、モデル 0 にまだ存在しないものをすべてロードしてレンダリングします (IASetVertexBuffers、VSSetShader、PSSetShader、PSSetShaderResources、PSSetConstantBuffers、VSSetConstantBuffers、Draw)。

  2. ロード用に確保したスロットを使用して、モデル 1 にまだ存在しないものをすべてロードしてレンダリングします (IASetVertexBuffers、VSSetShader、PSSetShader、PSSetShaderResources、PSSetConstantBuffers、VSSetConstantBuffers、Draw)。

  3. 等...

戦略 3 わかり ませんが、私はこれが初めてなので、上記はおそらくすべて間違っています。

directx (特に DX11) での効率的なレンダリングを可能な限り効率的にするための標準的な戦略は何ですか?

0 投票する
1 に答える
311 参照

graphics - directx でスロットを再利用すると、gpu は以前のリソースをメモリに保持しますか? また、元のプロセッサ リソースを安全に変更できますか?

私はdirectx についてこの質問を書いていて、次の質問はその一部でしたが、それらを分離する必要があることに気付きました。

何かが GPU の「スロット」(レジスタ) にない場合、再度使用するために GPU に再転送する必要がありますか。つまり、テクスチャ A をレジスタ t0 に入れ、後でテクスチャ B をレジスタ t0 に入れる場合は、次のようになります。テクスチャ t0 は GPU で利用できなくなりましたか? それとも、まだ GPU メモリに常駐していますが、それを取得するにはテクスチャ レジスタにロードする呼び出しを行う必要がありますか? それともまったく別のものですか?

同様に、PSSetShaders、または PSSetShaderResource、または IASetVertexBuffers などへの呼び出しを行います...戻る前にデータをブロックして GPU にコピーします。したがって、呼び出し後に、元のリソースを変更または解放することさえできます。 GPUに常駐?

これは複数の質問だと思いますが、1 日に directx に関する質問をしすぎると問題が発生することが予想されます (これらは、msdn のドキュメントがかなり沈黙している正直な質問だと思います。すべての初心者の質問)。

0 投票する
1 に答える
1949 参照

c# - SlimDX11デプスバッファの問題

SlimDX March SDKで問題が発生しています(DXSDK11の場合は2010年6月だと思います)。問題は、デプスビューを出力マージ状態にアタッチするたびに、画面に出力が表示されないことです。コードをDX11サンプルと比較しましたが、正しいようです。深度テスト(常に合格などを含む)のためにあらゆる種類のフラグとフォーマットを試しましたが、何も機能しないようです。誰かが間違いを見つけることができれば幸いです。これがコードです。手順は次のとおりです。

  1. バックバッファを初期化します。

    /li>
  2. 次に、デプスバッファを初期化します。

    /li>
  3. レンダリングターゲットを設定します。

    /li>

OutputMerger.SetTargetsからDepthViewを削除するとすぐに、画面に画像が表示され始めます(もちろん深度テストなし)。それ以外の場合はその逆です。

0 投票する
1 に答える
1767 参照

wpf - 異なる directx バージョンが連携し、より具体的には WPF と directx 11 を相互運用するために共有サーフェス キューが必要なのはなぜですか?

Directx 11 を WPF 内で動作させたい。この質問への回答から、これが可能であることは明らかです。2 番目の回答は、「共有サーフェス キュー」を実装する Microsoft コードを指しています。

共有サーフェス キュー コードを調べていますが、それがどのような目的を果たしているのかわかりません (異なるバージョンの directx でサーフェスを適切に共有する必要があること以外に)。directx サーフェスを共有するために共有サーフェス キューを作成する目的は何ですか? (具体的には、directx 11 と組み合わせた WPF の場合)。

注:私が引用した質問とは異なり、私はslimDXを使用していません

0 投票する
1 に答える
2648 参照

c++ - 「マッピング済みエラー」の原因となる動的テクスチャのマッピング

Direct3D11を使い始めたばかりで、1秒間に数回新しいデータで更新する予定の動的テクスチャを作成しようとしています。私の問題は、新しいデータでテクスチャを更新するたびに、D3Dデバッガーから次のエラーが発生することです。

D3D11:エラー:ID3D11DeviceContext :: Map:このリソースはすでにマップされています![RESOURCE_MANIPULATION ERROR#2097213:RESOURCE_MAP_ALREADYMAPPED]

これは、アプリケーションをしばらく実行した後、最終的にMap呼び出しからのE_OUTOFMEMORYエラーになります。

私は次のようなテクスチャを作成しています:

次のようにデータを更新します。

テクスチャを作成してデータをマップする前に、プログラムで行ったのはDirect3Dデバイスを初期化することだけです。私は自分が間違っていることに完全に困惑しています。私はこれについてmsdnでできる限り多くのことを読み込もうとしてきましたが、何が問題になっているのかを理解するのに何の助けにもなりませんでした。msdnによると、私は適切な手順を踏んでいます。

http://msdn.microsoft.com/en-us/library/ff476905(v=vs.85).aspx#Dynamic

テクスチャの説明も正しく記入していると確信しています。

この問題は、d3dデバイスの初期化に起因している可能性がありますか?マップ機能を誤用していませんか?十分な背景情報を提供しませんでしたか?何が起こっているのかについて何かアイデアはありますか?

追加情報:頂点シェーダーの定数バッファーにデータをマップしようとすると、同じ「リソースが既にマップされています」エラーが発生します。また、別のコンピューターでテストしたところ、同じマッピングの問題が発生しました。

更新:D3D11のチュートリアルコードをダウンロードし、テクスチャの作成とマッピングコードを取得して、チュートリアルコードがd3dの初期化を完了した直後にそれを挿入しました。マッピングエラーが発生するかどうかを確認したかっただけです。予想どおり、「リソースは既にマップされています」というエラーは発生しませんでした。さらに、チュートリアルからd3d初期化コードをコピーして自分のものに置き換えると、リソースのマップ済みエラーが発生し、d3dを初期化する前にウィンドウを作成するだけなので、さらに混乱します。

0 投票する
1 に答える
832 参照

directx - シェーダーに初挑戦。DirectX チュートリアルとの最初の混乱

Visual C++ 2010 での C++ に関する知識はほとんどなく、DirectX チュートリアルに従っています。ここまでのすべてを理解するのに十分な知識がありますが、今は HLSL シェーダーを含めようとしています。必要なコンテンツはありますが、HLSL がどのようなファイルである必要があるのか​​ わかりません。ファイルを作成する必要がある形式はありますか? シェーダー コードを .cpp ファイルに入れようとしましたが、CreateVertexShader 関数を使用するとアクセス違反が発生します。ヘッダーファイルに入れましたが、C++ のような HLSL コードを読み取り、構文エラーが発生しました。チュートリアルはこちら: http://www.directxtutorial.com/Tutorial11/BA/BA5.aspx

ページの下部にあるコードのコードは同じで、コンパイルされますが、デバッグでアクセス違反が発生します。適切に実行するために何をする必要があるかを誰かに教えてもらえますか?

ありがとう。

0 投票する
2 に答える
11749 参照

c++ - XMVECTOR メンバー変数を適切に使用する方法

位置、スケーリング、および回転のメンバーを持つ単純な IRenderable クラスがあります。

コンストラクターでそれらを設定しようとしています。最初の方法では、_rotation を設定しようとしてアクセス違反 0x00000000 が発生します (_position と _scaling はどちらも適切に設定されています)。

代わりに _rotation を XMVECTOR* にし、コンストラクターで _rotation(new XMVECTOR()) を使用すると、空の XMVECTOR に設定されますが、後で ID クォータニオンを設定しようとすると、アクセス違反がスローされます。

コンストラクターで XMQuaternionIdentity のアドレスを使用すると、オブジェクトの作成時に問題なく動作します。

しかし、クォータニオン自体には、レンダリングに使用する必要があるまでにガベージ データが含まれます。これらすべての状況で、_position と _scaling の両方が正常に機能しています。

この状況で XMVECTOR を使用する正しい方法は何ですか?

0 投票する
1 に答える
221 参照

fullscreen - フルスクリーン モードの DX11 ゲームでテクスチャが表示されない理由

DX11 ゲームでテクスチャを描画しています。全画面モードでテクスチャがまったく表示されないのは奇妙です。

参照用に状態設定をここにリストします。

考えられる最も可能性の高い問題は何ですか?

ありがとう、マーシャル

0 投票する
1 に答える
3786 参照

directx - DirectX 11で、SwapChain(DXGI_SWAP_CHAIN_DESC)で2つのバッファーを作成および登録する方法

私はDirectX11の初心者であり、 『Beginning DirectX 11』の第2章に続いて、次のコードを使用してバッファーを作成するためのコードがあります。

私の質問は、スワップチェーンの説明では、BufferDesc(DXGI_MODE_DESC構造体)が1つしかないため、明らかに1つのバッファーだけのスペースがあるということです。では、BufferCountが2以上に設定されている場合、2番目のバッファーはどのように登録されますか?別のDXGI_SWAP_CHAIN_DESCを使用していますか?いくつかのサンプルコードを投稿してください。

また、BufferCountのタイプはUNITです。これは、3つ以上のバッファーを追加できることを意味します。ダブルバッファリング手法では2つのバッファが使用されますが、1つのバッファは描画に使用され、もう1つのバッファはシーンに表示するために使用され、バッファが交換されます。3つ以上のバッファーの用途と利点は何ですか?