Problem beim erstellen vom DX-Device
-
Hallo zusammen,
Seit heute erhalte ich einen merkwürdigen Fehler beim ausführen meines Programms: DirectX bekommt es nicht mehr hin das 3d-device zu erstellen, obwohl ich nichts am Code geändert habe. Deswegen habe ich einfach mal angenommen es sei ein Grafikkartentreiber Problem oder ein Problem mit dem DirectX SDK und deshalb beides neu installiert, hat aber leider nichts geholfen.
Hier mal der Codeausschnitt (obwohl der wie gesagt gestern noch fehlerfrei funktioniert hat):
bool Initialize(HINSTANCE hInstance, HWND hwnd) { hInstance_ = hInstance; hwnd_ = hwnd; RECT dimensions; GetClientRect(hwnd, &dimensions); unsigned int width = dimensions.right - dimensions.left; unsigned int height = dimensions.bottom - dimensions.top; D3D_DRIVER_TYPE driverTypes[] = { D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP, D3D_DRIVER_TYPE_REFERENCE, D3D_DRIVER_TYPE_SOFTWARE }; unsigned int totalDriverTypes = ARRAYSIZE(driverTypes); D3D_FEATURE_LEVEL featureLevels[] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0 }; unsigned int totalFeatureLevels = ARRAYSIZE(featureLevels); DXGI_SWAP_CHAIN_DESC swapChainDesc; ZeroMemory(&swapChainDesc, sizeof(swapChainDesc)); swapChainDesc.BufferCount = 1; swapChainDesc.BufferDesc.Width = width; swapChainDesc.BufferDesc.Height = height; swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; swapChainDesc.BufferDesc.RefreshRate.Numerator = 60; swapChainDesc.BufferDesc.RefreshRate.Denominator = 1; swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; swapChainDesc.OutputWindow = hwnd; swapChainDesc.Windowed = true; swapChainDesc.SampleDesc.Count = 1; swapChainDesc.SampleDesc.Quality = 0; unsigned int creationFlags = 0; #ifdef _DEBUG creationFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif HRESULT result; unsigned int driver = 0; for(driver = 0; driver <totalDriverTypes; ++driver) { result = D3D11CreateDeviceAndSwapChain(0, driverTypes[driver], 0, creationFlags, featureLevels, totalFeatureLevels, D3D11_SDK_VERSION, &swapChainDesc, &swapChain_, &d3dDevice_, &featureLevel_, &d3dContext_); if(SUCCEEDED(result)) { driverType_ = driverTypes[driver]; break; } } //.....// }
Das Problem ist, dass die Funktion D3D11CreateDeviceAndSwapChain jedes mal den selben Fehlercode zurückgibt: -2147467259
Wenn ich den mit dem Directx-error-lookup-tool (oder wie das heißt) auslesen lasse kommt folgendes:HRESULT: 0x80004005 (2147500037)
Name: E_FAIL
Description: An undetermined error occurred
Severity code: Failed
Facility Code: FACILITY_NULL (0)
Error Code: 0x4005 (16389)Damit kann ich nur leider absolut nichts anfangen.
Außerdem spuckt Visual Studio mir noch im Ausgabe-Fenster beim ausführen von D3D11CreateDeviceAndSwapChain aus:
Eine Ausnahme (erste Chance) bei 0x7563c41f in test.exe: Microsoft C++-Ausnahme: _com_error an Speicherposition 0x002aef44..
Damit kann ich leider auch nichts anfangen ...wie gesagt, gestern hatte ich noch keine Probleme und ich habe wirklich keine Ahnung, was das Problem ist. Ich wäre echt dankbar, wenn jemand eine Idee hätte, wo der Fehler liegen könnte!
-
Ich hab jetzt rausgefunden, dass es an der Debug Runtime von DirectX liegt (zumindest funktioniert der Code, wenn ich "creationFlags |= D3D11_CREATE_DEVICE_DEBUG" weglasse...).
Hat irgendwer vielleicht eine Idee, was bei der DirectX Debug Runtime nicht stimmt? Das DirectX SDK vom Juni 2010 habe ich wie gesagt auch schon neu installiert...
-
Hab das selbe Problem. Arbeite mit nem Buch von Frank Luna und vor nem halben Jahr hat der Code noch funktioniert, nun wollte ich mal wieder ransetzen und bekomme den Fehler bei der swapchain wie oben beschrieben. Wenn ich das eine Debug-Flag rausnehme, ist der Fehler weg. Hab das SDK schon neu installierung alle include-Verzeichnisse überprüft, alles nochmal neu eingebunden in nem neuen Projekt, immer wieder mit dem selben Ergebnis.
Und wie gesagt: Es funktionierte vor nem halben Jahr noch einwandfrei.
Hat irgendwer eine Idee?