D3D10CreateDeviceAndSwapChain () всегда завершается ошибкой с DXGI_ERROR_INVALID_CALL - PullRequest
0 голосов
/ 31 января 2012

Я создаю скрытое окно и ищу указатель на IDXGISwapChain::Present().Проблема в том, что я не могу получить ни действительное устройство Direct3D10, ни допустимую цепочку обмена.

HWND hwnd = CreateWindow(TEXT("flhiSTATIC"), TEXT("flh DXGI Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, 0, NULL, NULL, 0);
DXGI_SWAP_CHAIN_DESC scd;
ZeroMemory(&scd, sizeof(scd));

scd.BufferCount = 2;
RECT rcWnd;
GetClientRect(hwnd, &rcWnd);

scd.BufferDesc.Width = rcWnd.right - rcWnd.left;
scd.BufferDesc.Height = rcWnd.bottom - rcWnd.top;
scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; // also tried DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
scd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
scd.BufferDesc.Scaling = DXGI_MODE_SCALING_CENTERED;
scd.BufferDesc.RefreshRate.Numerator = 60;
scd.BufferDesc.RefreshRate.Denominator = 1;
scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
scd.OutputWindow = hwnd;
scd.SampleDesc.Count = 1;
scd.SampleDesc.Quality = 0;
scd.Windowed = TRUE;
scd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;

pD3D10CreateDeviceAndSwapChain = reinterpret_cast<D3D10CREATEDEVICEANDSWAPCHAIN_PROC *>(GetProcAddress(d3d10, "D3D10CreateDeviceAndSwapChain"));

HRESULT hr = pD3D10CreateDeviceAndSwapChain(NULL /*pAdapter*/, D3D10_DRIVER_TYPE_HARDWARE, NULL, D3D10_CREATE_DEVICE_DEBUG, D3D10_SDK_VERSION, &scd, &pSwapChain, &pDev);
// this guy always fails with 0 in both pSwapChain and pDev...

Есть идеи, что может быть не так с приведенным выше кодом?

1 Ответ

0 голосов
/ 31 января 2012

Я полностью забыл о необходимости создать или назначить уже существующий класс окна: (

Это была проблема; извлеченный урок - всегда проверяйте коды возврата всех вызовов.

редактировать

Я полностью забыл позвонить CreateWindow с допустимым классом окна, либо тем, который я ранее зарегистрировал, либо тем, который был зарегистрирован кем-то в текущем модуле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...