問題タブ [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.
winapi - Direct3D 9 でウィンドウ モードに移動する
私は Direct3D アプリを作成していIDirect3DDevice9::Reset
ます。新しいプレゼンテーション パラメータを使用して、ウィンドウ モードからフルスクリーン モードに簡単に切り替えることができます。ただし、同じトリックを使用してフルスクリーン モードからウィンドウ モードに切り替えると、ウィンドウの境界線が失われます。
SetWindowLong
ウィンドウ スタイルを に設定してから に設定しようとするとWS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
、ウィンドウは境界線を取得しますが、direct3d デバイスは機能しなくなります。デバイスを再度リセットしても機能せず、管理対象リソースがデバイスに依存しているため、もちろん失敗します。SetWindowPos
SWP_FRAMECHANGED
Reset(),
Release()
SetWindowLong()
CreateDevice()
IDirect3DDevice9::Reset
ボーダー付きウィンドウを作成しているときに、ウィンドウ モードに戻すにはどうすればよいですか?
com - IDirect3DDevice9::Release が S_FALSE を返すのはなぜですか?
Direct3D9 デバイスの Release メソッドを呼び出すと、S_FALSE が返されますが、この値が返される理由を説明するものが見つかりません。
私が収集できることから、S_FALSE は、成功したが何もする必要はなく、一度だけ解放したことを意味します。
また、ウィンドウが破棄されてデバイスが解放された後でも、フルスクリーンの DirectX ウィンドウが残っているため、この方法が成功するとは思いません。
directx - ビデオを Direct3D 9.0c テクスチャにレンダリングする
Direct3D アプリケーションでビデオを再生しようとしており、DirectShow を使用して再生しようとしています。私の問題は、フレーム データを取得してテクスチャに入れる方法が見つからないことです (ISampleGrabber はインストールされません)。
これが行われている方法や例を知っている人はいますか?
direct3d9 - 複数の並列 ID3DXRenderToSurface を実行できますか?
ID3DXRenderToSurface の複数のインスタンスを作成し、それらをスレッドで並行してレンダリングすることは可能ですか? 可能性は低いと思われますが、DirectX の特定の側面についてはまだやや気が遠くなるようなことがあるので、質問してみようと思いました。
それができなくても大したことではありません。私が取り組んでいるアプリケーションは (残念ながら) オブジェクト レンダリングをグループに分割してサーフェスにレンダリングし、完成したサーフェスをバック バッファにレンダリングするだけです。可能であれば、すべてのグループを順次ではなく並行してレンダリングできるといいなと思いました。
c++ - 「通常の」IDirect3D9Surface からオフスクリーン プレーン サーフェスを取得する方法
私は Media Foundation でメディア プレーヤーに取り組んでいます。DXVA-HD で後処理を使用しようとしています。しかし、HD デバイスを使用して VideoProcessBltHD を実行しようとすると、E_INVALIDARGS で失敗します。私が疑問に思っているのは、入力として提供している ID39Surface で何らかの形で正しく機能していないということです。「IMFMediaBuffer」から入力サーフェスを取得しています (これは、SourceReader からサンプルを読み取って取得します)。
次のようにサーフェスを抽出しています: CHECK_HR (hr = MFGetService( video_buffer, MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&pSurface) );
ただし、MSDN の DXVA-HD の例では、VideoProcessBltHD は正常に動作します。
一方、サンプル コードの IDirect3DSurface9 サーフェスは、オフ スクリーンのプレーン サーフェスです。「私のサーフェス」(ビデオ データを含む) をオフスクリーン プレーン サーフェスとしてビデオ プロセッサに渡し、「blt 操作」を成功させるにはどうすればよいですか?
どんな助けでも大歓迎です。
ありがとうモッツ
2d - direct3d 描画操作のバッファリング
質問は2D固有です。
私は、レイヤーの 1 つのレンダー ターゲットであるテクスチャを常に更新しています。更新はテクスチャ全体の再描画であり、スプライトの描画とテキストの出力によって実行されます。この操作は頻繁に実行され、大量の CPU を消費します。もちろん、それを抑えるために再描画の回数を最適化しました。
これらの操作を Direct3D でバッファリングする方法はありますか? 現在、スプライト/テキスト操作のチェーンを繰り返し構築する必要があるためです。ワールド アップデートを実行するゲームを想定してみましょう。この退屈な作業をどのように克服するのでしょうか? たぶん、より多くのレイヤーを作成することによってですか?
私にとって最善の方法は、変更可能なドロー チェーン オブジェクトを作成することですが、Direct3D ではこのようなものは見つかりませんでした。
c++ - direct3d シェーダー パラメータを動的に渡す
オフセット パラメータを動的に変更して明るさとコントラストのシェーダを変更したいのですが、シェーダ バッファを変更するたびにシェーダを再コンパイルしたくありません。
現在のシェーダーコードは
どうすればoffsetBrightness
and をoffsetContrast
動的に渡すことができますか?
fullscreen - 複数の Direct3D 9 デバイスと Alt キーによるタブ移動
フルスクリーン モードで Direct3D 9 デバイスを作成し、プレゼンテーションを開始するアプリケーションがあります。後で、最初のデバイスを作成した後、新しい Direct3D デバイスを一時的にウィンドウ モード (同じスレッド上で別のウィンドウ用) で作成します。このデバイスをすぐにもう一度破棄しましたが、どういうわけか、Alt キーを押しながらフルスクリーン アプリケーションから抜け出すことができなくなりました。アプリケーションに焦点が合っていないように見えますが、アプリケーションはバックグラウンドに落ちるのではなく、一番上にとどまります。
一時デバイスを D3DDEVTYPE_NULLREF として作成すると、Alt-Tab で突然アウトできるようになります。その理由を知っている人はいますか?もしそうなら、既存のデバイスを台無しにせずに2番目の一時的なデバイスを作成するにはどうすればよいですか?
directshow - IMediaSample(DirectShow)からIDirect3DSurface9 / IMFSample(MediaFoundation)
私はカスタムビデオプレーヤーに取り組んでいます。私のアーキテクチャでは、DirectShow /MediaFoundationを組み合わせて使用しています。基本的に、私はDSを使用してVOBフレームを取得しています(MFではサポートされていません)。DirectShowからサンプルを取得することはできますが、レンダラーに渡すのに行き詰まります。MFでは、(IMFSampleから)Direct3DSurface9を取得し、IDirect3D9Deviceを使用してバックバッファーに表示します。
DirectShowを使用して、データバッファーオブジェクトとしてIMediaSampleを取得しています。これを変換してIMFSampleとして渡す方法がわかりません。他の人がサンプルからビットマップ情報を取得し、GDI+を使用してレンダリングしているのを見つけました。しかし、私のビデオデータには常にRGBデータが含まれているとは限りません。IMediaSampleからIDirect3DSurface9または多分IMFSampleを取得し、それをレンダリングに渡したいのですが、色空間の変換について気にする必要はありません。
私はこれに不慣れです。うまくいかない場合は訂正してください。ありがとう
c++ - ビデオ デコード アクセラレーションを使用した Direct3D アプリケーションのデバッグに失敗する
私はDXVA2でビデオプレーヤーを開発しています。Direct3D をデバッグしようとしているときに、コントロール パネルからデバッグ モードに切り替え、D3D_DEBUG_INFO
マクロを定義しました。
するとすぐにGetDecoderDeviceGuids
、リターン コード 0x80004005 で失敗しました。
を未定義にするとD3D_DEBUG_INFO
、GetDecoderDeviceGuids()
成功します。
Windows 7 32 ビット、Direct3D 9、ATI Radeon HD 4550、最新のドライバーを使用しています。
このエラーを何らかの方法でオーバーライドし、強化された Direct3D デバッグを使用することは可能ですか?
更新: 言い忘れましたが、私のプレーヤーは DirectShow も Media Foundation も使用していません。FFmpeg ライブラリを使用してビデオをデコードし、コードは VLC からコピーされました。