問題タブ [directx-10]
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++ - DirectX11フルスクリーンからの切り替え->ウィンドウの問題
私は、切り替えを管理する正しい方法を探して、さまざまなサイトをトロールしてきました。
ひびが入ったと思っていましたが、描画呼び出し用に頂点シェーダーとピクセルシェーダーを設定しているときに、奇妙な問題に気づきました。
alt-enterを使用して全画面に切り替えることができ、すべてが正常です。空白のウィンドウを残すか、正しくレンダリングしますが、更新のレンダリングを続行しないで元に戻します。
つまり、基本的に1つのフレームがレンダリングされ、入力は登録されますが、全画面に切り替えるまで画面に表示されません。
Flush()を使用すると強制的に動作することに気付いたので、スワップチェーンまたはデバイスコンテキストに何かが欠けていることは明らかですが、明らかに解決策ではないことに気付きました。
レンダリング関数スニペット
WM_SIZEケースから渡された高さ/幅を取得するサイズ変更関数
これでチェーンのセットアップを交換します
私はこれをD3D11_CREATE_DEVICE_DEBUGでテストしており、エラー/警告/リークはなく、コメントや入力を歓迎します。
opengl - DX9 および DX10): デフォルトのピクセル (および頂点) シェーダーは何ですか? (可能であれば OpenGL も。)
DX9 ではオプションでシェーダーを指定できること、および DX10 ではシェーダーを指定する必要があることを認識しています。私が持っている質問は、シェーダーを使用したいと言って、シェーダーを指定しないとどうなるかということです。一言で言えば、私が探しているのはデフォルトの動作です。デフォルトのシェーダーはありますか?
次のシナリオに興味があります。
- DX10、ピクセル シェーダーを指定しないでください。(PSSetShader(NULL) を呼び出さなければなりませんか? そうでない場合はどうなりますか?) 実行される既定のシェーダーは何ですか?
- 同じ質問、頂点シェーダー。
- DX9 で、ピクセル シェーダーを使用するように指定したのに指定しなかった場合はどうなりますか? デフォルトはありますか?固定機能インターフェースの使用を選択した場合、デフォルトはありますか? それらのデフォルトは同じですか?
- おまけの質問: OpenGL と GLSL はどうですか? DX9と同じ質問です。
これに関するドキュメントへのポインタを見てみたいです.MicrosoftのオンラインDXドキュメントを熟読しましたが、デフォルトの動作を見つけることはできませんでした.
ありがとう!
directx - 警告の詳細を見つける方法: ID3D10Buffer::SetPrivateData: サイズが異なる同じ名前の既存のプライベート データが見つかりました!
DirectX10 プログラムをデバッグ モードで実行すると、次のエラーが発生します。
D3D10: 警告: ID3D10Buffer::SetPrivateData: サイズが異なる同じ名前の既存のプライベート データが見つかりました! [ STATE_SETTING WARNING #55: SETPRIVATEDATA_CHANGINGPARAMS ]
私はプロジェクトを学習演習として高度にOOPにしようとしているので、これが発生する可能性がありますが、詳細を取得する方法はありますか?
c++ - DirectX10で頂点バッファーを適切に更新する方法
少し背景を説明します。私はC++でプロジェクトに取り組んでおり、リアルタイムのプロファイルデータに基づいてオブジェクトの3D表現を描画しようとしています。プロファイリングデータは、外部プロファイリングハードウェアから収集されます。システムはオブジェクトに沿って移動し、1秒間に300回の速度で、ソフトウェアにプロファイルスライスを提供します。各スライスは、最大8000個のXYポイントのリストで構成されます。プロファイラーの動きはエンコーダーによって記録されます。エンコーダ情報は、スキャンの3次元を提供します。
注意すべきもう1つの重要な点は、プロファイラーがオブジェクト上を前後に移動する可能性があることです。このとき、以前に読み取った/描画したスライスを(エンコーダーの位置に基づいて)新しいスライスに置き換えたいと思います。今のところ、私はエンコーダーカウントで保存するスライスの循環バッファーでこれを達成しています。これは、バッファがいっぱいになり、古いスライスの上書きを開始するときに、スライスを破棄したいことも意味します。画面に被写体の適切な量を表示するには、一度に1000スライスのプロファイルデータを描画する必要があります。今のところ、オブジェクトを点群としてレンダリングしています。将来的には、隣接するスライスを添付して、三角形のリストとしてレンダリングすることを試みる可能性があります。
私はDirectXを初めて使用しますが、書籍やオンラインの例を使用して、オブジェクトを3Dで描画するようになりましたが、頂点バッファーを効率的/適切に使用していないと確信しています。私が見つけたほとんどの例は、非常に静的なモデルで機能します。したがって、ポイントのリストを使用して単一の頂点バッファーを作成する傾向があり、その後、行列変換によって操作されます。一方、ハードウェアからプロファイルデータを取得すると、シーンが非常に迅速に更新されます。
現在、読み込んだスライスごとに新しい頂点バッファを作成しています。シーンを描画するときは、最大1000個のバッファのリストをループし、それぞれに対してDraw()を呼び出します。一度に描画される頂点バッファーの数を半分に減らすと、FPSが大幅に増加するのに対し、バッファーあたりの頂点ポイントの数を半分にするとほとんど改善が見られないことに気付きました。これは、複数の頂点バッファーであることを示しています。これにアプローチする適切な方法ではありません。
ですから、私の質問の本質は...頂点が頻繁に変化するときに、これらすべての頂点を1つの頂点バッファーに入れることができるかどうか疑問に思っています。既存の頂点バッファ内のポイントを更新できますか?または、シーンを更新するたびに1つの新しいバッファを再作成する必要がありますか?最後に覚えておくべきことは、ハードウェアからのスライスあたりのポイント数が異なることです。したがって、前のスライスを上書きする場合、新しいスライスには、置き換えられるスライスよりも多いまたは少ないポイントが含まれる可能性があります。
御時間ありがとうございます。どんなアドバイスも大歓迎です!
c++ - DirectX 変数を使用した「Extern」?
何らかの理由で、directx 変数を extern として宣言するたびに、リンク エラーが発生します。
例:
一部のヘッダー ファイルでは、次のようになります。
pd3dDevice を含む .h ファイルをインクルードする他の cpp ファイル:
次のようなエラーが表示されます。
2>main.obj: エラー LNK2001: 未解決の外部シンボル "struct ID3D10EffectMatrixVariable * pProjectionVariable" (?pProjectionVariable@@3PAUID3D10EffectMatrixVariable@@A) 2>C:\Users\steve\documents\visual studio 2010\Projects\Shyr\Debug\Shyr .exe : 致命的なエラー LNK1120: 1 つの未解決の外部
宣言を取り除いたextern
瞬間、それは魅力のようにコンパイルされます。もちろん、実際には、作業中の dll からスワップ チェーン、デバイス、ターゲット ビューなど、いくつかの変数を参照したいと考えています。何が起きているか知っている人はいますか?
(また、はい、一度だけ宣言されました)
問題が DirectX 変数に限定されていることを証明するために、extern 変数「george」を作成し、それを 4 に初期化しました。次に、それを別の場所で参照して、値を変更しました。うまくコンパイルされました。
c++ - DirectXに以前のレンダリング状態を復元させるにはどうすればよいですか?
テキストを描画し、プリミティブな三角形を描画するプログラムがあります。両方の機能は独立して機能します。ただし、それらを続けて呼び出すと、三角形が描画されず、次のエラーが発生します。
調査を行ったところ、ID3DXFontがレンダリング時に状態を変更したことが原因のようです。このスレッドのSc4Freak:
http://www.gamedev.net/topic/487280-dx10-render-question/
D3DX10_SPRITE_SAVE_STATEを渡すことをお勧めしますが、スパーツとダイレクトテキストの関係、またはどこで呼び出すべきかを正確に理解していません。なぜこれが起こるのか誰かが説明できますか?
c++ - シェーダーのプログラミングを学ぶのに最適なツールは何ですか?
私は最近 DirectX 10 の作業を行っていて、DirectX 11 と Shader Model 5.0 に移行することを検討しています。過去にいくつかの非常に単純なシェーダーを書いたことがありますが、視野を広げて、より複雑なシェーダーに挑戦したいと考えています。私の質問は、多面的なものです:
シェーダーをプログラムするのに最適なツールは何ですか? 私はビジュアルスタジオといくつかのFXコンポーザーしか使用していません-読んでください:それを開いて見るのに十分です.
gfx カードのブランドは、プログラムできるシェーダーの種類に影響しますか?
- 私が質問した理由は、Nvidia の方がはるかに優れたツールを持っているように見え、ATI は RenderMonkey をキャンセルしたように見えるからです。それに代わるものはないように見えますか?私が間違っている?
#1 と同じような質問ですが、ベンダー固有ではなく DirectX シェーダーを作成するだけの場合は、クロスベンダー ツールを使用できますか?
- ベンダー固有にする必要がある場合、Nvidia には一般的に優れたツールがありますか? ATI はコストパフォーマンスに優れているように思われるので (そして AMD ボードを持っています)、今すぐ ATI を使用したいと思っていますが、ほとんどの場合プログラミングに gfx カードを使用しているため、ためらっています。
wpf - フロントバッファが失われた後のHRESULT0x8876086a
DirectXを使用してアンマネージコードで画像をレンダリングし、WPFでD3DImageを使用してサーフェスをホストしています。システムがスリープ状態になると、frontBufferLostイベントが発生します。イベントが処理され、すべてのリソースが破棄されて再作成されます。
アンマネージコードでDirect3D9を使用している間は、すべてが正しく機能します。イベントが発生すると、デバイスが再作成され、エラーなしでレンダリングが実行されます。
しかし、エンジンでDirectX10を使用する場合、Surfaceキューの目的でDirect3D9デバイスも必要になるため、10個と9個のデバイスの両方を削除して再作成しようとします。この段階で、GetDeviceCapsの呼び出し中に、常に0x8876086aを取得します。これは、デバイスが使用できないと思います。
誰かがこの問題で私を助けることができますか?
c++ - DirectX 10 でアイソメ タイル マップを作成するために多数の (500 以上の) スプライトを描画するにはどうすればよいですか?
そこで、私は DirectX に関する本 (特に 10 冊) を何冊か読んで、それを使用するゲームを作成しようとしていますが、どの本にも言及されていないように見える問題に悩まされています。スプライトを使用してアイソメトリック マップを作成すると、ボードが大きくなるにつれて、プログラムの速度が劇的に低下します。各タイルは 64x45 で、スプライトを使用して 36x19 (684) のタイル マップを構築するまでに、アプリケーションのロードに約 6 秒、各フレーム間に約 5 秒かかります。ブレークポイントを使用したデバッグでは良い手がかりが得られなかったので、現在のコードで問題がこの特定のセクションにある領域を絞り込みました。
どんな助けでも大歓迎です。
hlsl - ジオメトリ シェーダーが DirectX10 HLSL でコンパイルされない
Frank Luna の著書『Introduction to 3D Game Programming with DirectX』で説明されているように、ビルボード システムを生成するためにジオメトリ シェーダーをコーディングしようとしています。次のようにシェーダーをテクニックに挿入します。
ただし、これによりエラー 1>D3DEffectCompiler : エラー : 有効な VertexShader-GeometryShader の組み合わせが Technique render の Pass P3 に見つかりませんでした。
VS と GS の両方の構造体を以下に示します。
それらは同じであるべきですか?