Direct3D Device kann auf einmal nicht mehr erstellt werden
-
Hallo,
Ich habe das Programm eigentlich schon lange am laufen, doch als ich es gestern wieder starten wollte, kann es auf einmal kein Direct3D Gerät mehr erstellen und der Debugger gibt als letztes aus:
Direct3D9: (ERROR) :Failed to initialize primary swapchain
Direct3D9: (ERROR) :Failed to initialize Framework Device. CreateDevice Failed.Kurz davor hat er ein Problem mit dem exklusiven Modus der Maus, aber das dürfte ja nichts damit zu tun haben. Die Funktion zum intitialisieren von d3d sieht so aus:
D3DPRESENT_PARAMETERS PresentParams; ZeroMemory(&PresentParams,sizeof(D3DPRESENT_PARAMETERS)); int iVideoMode=(int)SendMessage(GetDlgItem(hDialog,IDC_RESOLUTION),CB_GETCURSEL,0,0); DisplayMode=dmDisplayModes[iVideoMode]; delete[] dmDisplayModes; PresentParams.BackBufferWidth=DisplayMode.Width; PresentParams.BackBufferHeight=DisplayMode.Height; PresentParams.BackBufferFormat=DisplayMode.Format; PresentParams.BackBufferCount=1; PresentParams.SwapEffect=D3DSWAPEFFECT_DISCARD; PresentParams.hDeviceWindow=hWindow; PresentParams.Windowed=bWindowed; PresentParams.EnableAutoDepthStencil=TRUE; PresentParams.AutoDepthStencilFormat=D3DFMT_D24S8; PresentParams.Flags=D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL; PresentParams.FullScreen_RefreshRateInHz=bWindowed?D3DPRESENT_RATE_DEFAULT:dmDisplayModes[iVideoMode].RefreshRate; PresentParams.PresentationInterval=bWindowed?D3DPRESENT_INTERVAL_DEFAULT:D3DPRESENT_INTERVAL_ONE; SafeRun(d3d->CreateDevice(Adapter,D3DDEVTYPE_HAL,hWindow,bHAL?D3DCREATE_HARDWARE_VERTEXPROCESSING:D3DCREATE_MIXED_VERTEXPROCESSING,&PresentParams,&d3dDevice),"Fehler beim erstellen des Direct3D Gerätes","Direct3D Gerät erfolgreich erstellt!");
Wie gesagt, eigentlich lief der Code schon, ich weiß echt nicht woran es liegen könnte.
Vielen Dank für jede Hilfe
-
Du löschst dmDisplayModes mit delete[] und weiter unten greifst Du wieder auf die Variable zu. Klar, dass das so im Normalfall nicht klappt.
-
Jo, das war n ganz klarer Fehler. Jedoch lässt sich das Direct3D Device immernoch nicht erstellen. Es ist ja auch nicht die Laufzeitumgebung, die abbricht, sondern CreateDevice gibt was negatives zurück.
Aber danke schonmal für diesen Tip
-
Creon schrieb:
sondern CreateDevice gibt was negatives zurück.
und was??
es gibt da so eine nette funktion namens DXGetErrorString9 (siehe DirectX Docu
) die wird dir bzw. uns, wenn du den fehler dann postet, bestimmt helfen wird.