0

しばらくの間 DirectX のドキュメントを見てきましたが、DirectX API の説明に関する適切な情報源を見つけるのが難しいと感じています。

実行時に解像度を変更する DX9 のラッパー クラスのメソッドを作成しようとしています。私はこれを DirectDraw で処理することができましたが、より一般的なはずの DX9 に関する情報は見つかりませんでした。

私が見つけたのは SetDisplayMode への参照だけでしたが、私の Direct Object にも DirectX Device にもこのメソッドはありません。

DirectX9を使用しています。

方法の例:

void SetResolution(int width, int height, int depth)
{
   // I have access to DirectX device, object and the window HWND in this class
};

...HWND のウィンドウ サイズを変更する必要がありますか?それとも DirectX で処理する必要がありますか? Windows アプリケーションで解像度を変更する方法は知っていますが、DX9 でそれを行う方法がわかりません。

4

2 に答える 2

5

D3DPRESENT_PARAMETERS を通常どおりに調整してみてください。何かのようなもの:

// D3DPRESENT_PARAMETERS is already defined as md3dPP
RECT R ={0, 0, 640, 480}
AdjustwindowRect(&R, WS_OVERLAPPEDWINDOW, false);
md3dPP.BackBufferFormat = D3DFMT_UNKNOWN;
md3dPP.BackBufferWidth = 640;
md3dPP.BackBufferHeight = 480;
md3dPP.Windowed = true;

必要に応じて、次のようにウィンドウ スタイルを変更することもできます。

SetWindowLongPtr(yourWindowHandle, GWL_STYLE, WS_OVERLAPPEDWINDOW)

// must use SetWindowPos for SetWindowLongPtr changes to take effect
SetWindowPos(yourWindowHandle, HWND_TOP, 100, 100, R.right, R.bottom, SWP_NOZORDER |     SWP_SHOWWINDOW);

または、フルスクリーンを使用している場合:

md3dPP.BackBufferFormat = D3DFMT_X8R8G8B8;
md3dPP.BackBufferWidth = 640;
md3dPP.BackBufferHeight = 480;
md3dPP.Windowed = true;

SetWindowLongPtr(yourWindowHandle, GWL_STYLE, WS_POPUP)

// must use SetWindowPos for SetWindowLongPtr changes to take effect
SetWindowPos(yourWindowHandle, HWND_TOP, 0, 0, 640, 480, SWP_NOZORDER | SWP_SHOWWINDOW);

いずれにせよ、IDirect3DDevice9::Reset を呼び出して、これをフォローアップします。リセットするときは、必ずリソースを再初期化してください。

したがって、次のように定義した場合: IDirect3DDevice9 *gd3dDevice;

使用する:

gd3dDevice->Reset(&md3dPP);
于 2013-01-11T14:41:52.013 に答える
1

解像度を作成するときに、IDirect3DDevice9を使用して解像度が設定されD3DPRESENT_PARAMETERS、フロントバッファが割り当てられます。デバイス全体を再作成するか、 IDirect3DDevice9 :: Resetを呼び出さずに、バッファーのサイズを変更することはできません。

于 2013-01-11T13:03:45.627 に答える