Изменение разрешения в DirectX9

Мне трудно найти хорошие источники информации для объяснения API DirectX, хотя я некоторое время изучал документацию DirectX.

Я пытаюсь создать метод для класса-оболочки для DX9, который меняет разрешение во время выполнения. Мне удалось справиться с этим с помощью DirectDraw, но я не нахожу информации о DX9, хотя она должна быть более распространенной.

Все, что я нашел, было ссылкой на SetDisplayMode, но ни у моего Direct Object, ни у моего DirectX Device такого метода нет.

Я использую DirectX 9.

Пример метода:

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.

0

Решение

Попробуйте настроить параметры 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);
4

Другие решения

При создании IDirect3DDevice9 решение будет установлено с помощью D3DPRESENT_PARAMETERS и передний буфер будет выделен. Вы не можете изменить размер буфера без воссоздания всего устройства или вызова IDirect3DDevice9 :: Сброс.

1

По вопросам рекламы [email protected]