Direct3D 9Ex - создание полноэкранного устройства

0

Я смотрел по всему Интернету и ничего не нашел.

Я знаю, что Direct3D 9Ex работает после Alt-Tabbing из программы, unline Direct3D 9 (который просто сбой). По этой причине я пытаюсь использовать Direct3D 9Ex. Я хочу сделать программу в полноэкранном режиме. Тем не менее, всякий раз, когда я выполняю какую-либо операцию с устройством (IDirect3DDevice9Ex *), я получаю адрес памяти с ошибкой доступа 0x00000000. Это мой код:

Direct3DCreate9Ex(D3D_SDK_VERSION, &pD3D);
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferHeight = iHeight;
d3dpp.BackBufferWidth = iWidth;
d3dpp.hDeviceWindow = hWnd;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = false;
D3DDISPLAYMODEEX dm;
dm.Format = D3DFMT_X8R8G8B8;
dm.Height = iHeight;
dm.Size = sizeof(dm);
dm.RefreshRate = 60;
dm.ScanLineOrdering = D3DSCANLINEORDERING_PROGRESSIVE;
dm.Width = iWidth;
pD3D->CreateDeviceEx(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &dm, &pD3DDevice);

Любая помощь будет оценена по достоинству.

  • 0
    Вы не проверили, что pD3D не является нулевым. Вызов на первой линии может быть неудачным.
  • 0
    Он не может быть нулевым, учитывая, что вызов CreateDeviceEx не вызывает нарушение прав доступа.
Показать ещё 8 комментариев
Теги:
fullscreen
directx-9

1 ответ

0

d3dpp.FullScreen_RefreshRateInHz (0) отличается от dm.RefreshRate(60). Оба они должны быть одинаковыми, попробуйте D3DPRESENT_RATE_DEFAULT для обоих.

Возврат HRESULT из вызова CreateDeviceEx должен быть проверен с использованием макроса SUCCEEDED или FAILED.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню