問題タブ [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.

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

directx - DllMainからIDirect3D9::CreateDevice()を呼び出すとハングします

理由は何ですか?

DLL_PROCESS_ATTACHのDllMain()からIDirect3D9 :: CreateDevice()を呼び出していますが、ハングします

コードは次のように簡単です。

GetDesktopWindow()は単純化のために使用されています。独自のウィンドウを作成して使用しようとしましたが、同じ結果になりました。

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

directx - Direct3D:IDirect3DSurface9(デフォルトプール)からシステムメモリビットマップを取得する効率的な方法?

私はIDirect3DSurface9、デフォルトプール、YUVフォーマットを持っています。どうすれば効率的にビットマップビットを取得できますか?現時点では私は:

    レンダリングターゲットを作成します。
    device->CreateRenderTarget(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DMULTISAMPLE_NONE, 0, TRUE, &render_target, NULL)
    YUVをRGB32に変換:(
    device->StretchRect(videomem_surf, NULL, render_target_, NULL, D3DTEXF_NONE)
    完全な長方形、ストレッチなし)
    システムメモリにプレーンなオフスクリーンサーフェスを作成する
    device->CreateOffscreenPlainSurface(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &sysmem_offscreen_surf, NULL)
    ビデオメモリからsysmemにデータをコピーします。
    device->GetRenderTargetData(render_target, sysmem_offscreen_surface)
    オフスクリーンサーフェスからGetDC、互換性のあるDCおよび互換性のあるビットマップを作成し、オフスクリーンの表面DCから互換性のあるDCにBitBltを作成し、GetDIBits()によってビットマップビットをバッファーにコピーします

元のサーフェスからレンダリングターゲット、次にオフスクリーンサーフェス、互換性のあるビットマップ、最後にバッファへのコピーが非常に多いため、これは少しオーバーヘッドに見えます。これをどのように改善できますか?

ありがとう

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

graphics - WinXP D3D9 で Xbox360 の D3DRS_VIEWPORTENABLE に相当するものは何ですか?

Xbox360 と WinXP のマルチプラットフォーム コードベースを維持しています。XP 側で、Xbox360 バージョンの D3DRS_VIEWPORTENABLE に関連しているように見える問題が見られますが、WinXP D3D9 には同等のものはありません。この記事には興味深いアイデアがありましたが、恒等行列を構築する唯一の方法は、D3DVIEWPORT9::X と D3DVIEWPORT9::Height に負の数を指定することですが、これらは符号なしの数値です。(とにかく負の数を入力しようとしましたが、何も興味深いことはありませんでした。)

では、WinXP/D3D9 で D3DRS_VIEWPORTENABLE の動作をエミュレートするにはどうすればよいでしょうか?

(明確にするために、私が見ている結果は、Xbox360 では 2D 画面に合わせたクワッドが正常に動作するが、WinXP ではオフセット/ストレッチされているということです。実際、(0, 0) は、WinXP ではなく、画面の中央から始まります。ビューポート変換を適用した結果、Xbox360 のように左下隅に表示されます)。

更新: この質問を書いた時点では Xbox360 devkit を持っていませんでしたが、その後入手しました。D3DRS_VIEWPORTENABLE 状態の無効化をコメントアウトしたところ、WinXP ビルドとまったく同じ動作が Xbox360 でも発生しました。したがって、WinXP でオフになっている D3DRS_VIEWPORTENABLE をエミュレートするために、このギャップを埋める DirectX マジックが必要です。

0 投票する
3 に答える
60 参照

c++ - hDC のメモリ管理

デバイス コンテキスト (hDC) へのハンドルを返すメソッド GetDC() を提供する ID3DXFont (ちなみに Direct3D9) があります。この値のメモリはどのように管理されていますか? MSDN はそれについて何も言及しておらず、COM インターフェイスのような独自のメモリ管理も提供していません。

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

directx - Direct3D 9 の作成とスレッドの解放?

ビューポートのレンダリングに Direct3D を使用するアプリケーションがあり、実行時にリンクするメイン アプリケーションとは別の DLL モジュールとして作成されています。主なアプリケーションは C# プログラムです。

Direct3D デバイスとそのリソースの作成と初期化は、ネイティブ DLL 側で行われます。メインの C# プログラムは、この DLL からウィンドウを要求するだけです。現在、メインの GUI ループは C# 実行可能ファイルにあるため、ビューポートが閉じられたり破棄されたりするたびに、関連する Direct3D デバイス/リソースの解放を要求するために DLL 関数を呼び出す必要があります。

問題は、Direct3D デバイスを解放しようとすると、プログラムがパニックになることです。それは、それを解放しようとしているデバイスを作成したスレッドとは異なるスレッド(DLLにメッセージを送信しているため、私が推測するメインのC#プログラム)であると言います。

この問題を回避する方法はありますか? 何かご意見は?

Direct3D9 を使用しています。

助けていただければ幸いです。

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

com - Direct3D9 を使用する場合、CoInitialize() を呼び出す必要がありますか?

私の理解では、D3D は COM を使用しているため、答えはイエスです。しかし、Ogre レンダリング エンジンでは、これは呼び出されないようです。これは良いことですか、それとも見落としですか?

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

visual-c++ - Direct3D9 デバイスを作成するための最小限のコード

これは安定したリリース コード用ではありません。何かをテストするために、開発用 PC の HWND から C++ アプリで作成されたウィンドウ付きの D3D9 デバイスを取得する必要があるだけです。オプションのロードでデフォルトにすることができます。

私が持っていた古い D3D8 クラスから一緒にハックしようとしていましたが、D3DERR_INVALIDCALL を取得しています。

基本的に私は今これを持っています:

いくつかD3DPRESENT_PARAMETERSのオプションが原因である可能性があると考えています.Zバッファのバックバッファ、ステンシル、またはAAについては気にしません。古いプレーンデバイスは問題ありません。

互換性のないフラグをコピーして一緒に貼り付けましたか?

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

c++ - モデルの中心でカメラを回転

DirectX 9 でレンダリングされた 2 つのメッシュと、0,0,0 を見ているカメラがあります。1 つのメッシュは 0,0,0 にあり、もう 1 つのメッシュは 5,0,0 にあります。カメラを 0,0,0 の周りに回転させて、常に 2 つのメッシュを新しい位置から見るにはどうすればよいですか? キーボードの矢印キーを押してカメラを回転させたい

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

direct3d9 - D3D9 HLSL マトリックス化された私の脳

Direct3D の専門家の皆さんに助けを求めています。率直に言って、私は HLSL の非常に奇妙な振る舞いに頭がおかしくなっています。それは私が行列を指定する方法です。

今私の質問 D3DX 9 関数:

D3DXMatrixOrthoOffCenterRH など...

次の形式で使用される行列を返しますか: v' = v * M // 列メジャー

または v' = M * v // 行メジャー ???

D3DXMatrixTrnaslate が列メジャーであることに気付き、すべての関数で同じであると想定しています。

D3DX の Project および Unproject 関数は、上記の関数によって返されるのと同じ形式をとりますか?

HLSL 行列の乗算で本当にクレイジーな経験をした人はいますか?

ありがとう。

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

directx - カスタム DirectX 再頒布可能インストーラーのパッケージ化

MS のアドバイスに従って、D3D9 アプリケーションの DX インストーラー コンテンツからほとんどのファイルを削除し、合計で 5Mb に減らしました。しかし今は、MS 自身が提供する再配布可能なインストーラーのように、これらのファイルを単一のインストーラーにパッケージ化したいと考えています...そのため、ファイルを手動でアンパッケージすることなく、/silent スイッチを使用して、アプリケーションのインストール プロセスの一部として実行できます。それらを削除します。パッケージ化された DXSetup.exe が実行されるように、これを行う簡単で標準的な方法はありますか?

それとも、これは複雑すぎて、ファイルを解凍し、DXSetup.exe を実行して、インストール後にファイルを削除するだけでよいのでしょうか?