0

DirectX 6.1 ライブラリの周りに Windows32 フックを DirectX 9.0c に書き込んでいます。アイデアは、DX 6.1 3D デバイスへのすべての呼び出しを Direct 9.0c への呼び出しに置き換え、いくつかのカスタム コードを挿入することです。これにより、パッチを適用している古いゲーム (99 年) でシェーダーやポストエフェクトなどを使用できるようになります。

古い DX 6.1 3D デバイスは、DDraw モジュールを作成することによって作成されました。その後、ゲームはデバイスの上限を列挙しています。私のモジュールでは、DDraw モジュール全体がスキップされ、3D ビューが初期化されます。したがって、DDraw デバイスをまったく持っていないため、必要な Ddraw4 デバイス キャップをゲームに与えることができないという問題があります。

私の質問は、DDraw4 デバイスを初期化せずに DDraw4 デバイス キャップを取得する方法です。おそらく、固定リストを作成してゲームにフィードするだけで十分でしょうが、そのリストに何を入れるべきかわかりません (そうあるべきだと思ったものを与えたところ、ゲームが終了しました - ロガーは、デバイス キャップの直後であることを示しました)チェック済み)

4

2 に答える 2

3

私はこれを試したことはありませんが、次のことを試してみてください。6.1 SDK を持っていないと仮定すると、DDCAPS構造 (DirectDraw 構造) を自分で作成し (基本的には DWORD のみ)、DX9 GetDeviceCaps を使用して機能 ( D3DCAPS9 ) を取得できます関数。次に、取得したキャップから必要な値を (DX9 を使用して) 取得し、DDCAPS 構造体の DirectDraw に同等の値を設定します。次に、この入力された caps 構造をゲームにフィードできます。いくつかの注意点--あなたが言及したように、具体的に何が必要なのかわからないので、(ソースコードがない限り)ヒットとミスのようなものです。また、caps 構造値 (DX9 と DDraw の間) の 1:1 マッピングがない場合があります。最後に、これは 6.1 SDK がないことと関連しています。フラグの値がわからない場合、取得したキャップに従って値を設定するときに、フラグを誤って設定する可能性があります。先に述べたように、これはかなり的外れかもしれません (または、多くの調査作業が必要です) が、試してみることができるかもしれないと考えました。

于 2010-07-16T09:10:09.733 に答える
0

ソリューションは少し粗雑でしたが、最も重要なことは、問題なく動作していることです。

DDraw 6.1 を初期化してデバイス キャップを取得し、それらをディスク上のファイルにダンプする小さな自己完結型ユーティリティを作成しました (デバイス キャップは Plain Old C 形式の構造であるため、保存は非常に簡単です)。次に、ディスクからデバイス キャップ ファイルを読み取り、アプリケーションから求められたときにそれを返すことができます。

于 2011-02-10T21:44:11.317 に答える