Direct3d 10 создание цепочки устройств и свопов
Ладно, я схожу с ума здесь, кажется, нет абсолютно ничего плохого, но D3D10CreateDeviceAndSwapChain() продолжает терпеть неудачу из-за "недопустимых" параметров (0x887A0001), хотя я искал в интернете, и все, что я нахожу, кажется, подтверждает, что мой код просто прекрасен. Кто-нибудь, пожалуйста, скажите мне, в чем проблема этой функции.
bool CreateGraphicsObjects(void) { DXGI_SWAP_CHAIN_DESC scd = {0}; scd.BufferDesc.Width = AppData.Width; scd.BufferDesc.Height = AppData.Height; scd.BufferCount = 1; scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; scd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; scd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; scd.BufferDesc.RefreshRate.Denominator = 50; scd.BufferDesc.RefreshRate.Numerator = 1; scd.SampleDesc.Count = 1; scd.SampleDesc.Quality = 0; scd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; scd.OutputWindow = AppData.MainWnd; scd.Windowed = FALSE; D2D1_RENDER_TARGET_PROPERTIES rtp; rtp.pixelFormat.format = DXGI_FORMAT_R8G8B8A8_UNORM; rtp.type = D2D1_RENDER_TARGET_TYPE_DEFAULT; rtp.pixelFormat.alphaMode = D2D1_ALPHA_MODE_PREMULTIPLIED; rtp.usage = D2D1_RENDER_TARGET_USAGE_NONE; rtp.minLevel = D2D1_FEATURE_LEVEL_DEFAULT; rtp.dpiX = 0; rtp.dpiY = 0; if ((Error = D3D10CreateDeviceAndSwapChain(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, D3D10_CREATE_DEVICE_SINGLETHREADED, D3D10_SDK_VERSION, &scd, &SwapChain, &Gfx)) != S_OK) { RetCode = -1; } else if (SwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (void**)&BkgBuff) != S_OK) { RetCode = -2; } else if (BkgBuff->QueryInterface(__uuidof(IDXGISurface), (void**)&BkgSurf) != S_OK) { RetCode = -3; } else if (D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &D2D) != S_OK) { RetCode = -4; } else if (D2D->CreateDxgiSurfaceRenderTarget(BkgSurf, &rtp, &Rtg) != S_OK) { RetCode = -5; } else if (DWriteCreateFactory(DWRITE_FACTORY_TYPE_ISOLATED, __uuidof(IDWriteFactory), (IUnknown**)&DWrite) != S_OK) { RetCode = -6; } else { RetCode = 0; } if (RetCode != 0) { return false; } return true; }
Что я уже пробовал:
Я перепробовал буквально все, читал документацию MSDN, искал учебники, менял параметры и т. д., Но это просто не хочет работать.
Jochen Arndt
Проверьте правильность параметров среды выполнения (ширина, высота и дескриптор главного окна AppData).
Вы можете использовать D3D10_CREATE_DEVICE_DEBUG, чтобы получить более подробное сообщение о том, какие параметры неверны (требуется установленная поддержка отладки D3D).
Если все еще не решено, используйте документацию, чтобы проверить, есть ли конфликт с используемыми параметрами и поддерживаются ли запрошенные операции вашим оборудованием.