CreateDevice() gibt D3DERR_INVALIDCALL zurück...



  • Hallo!

    Ich habe ein Problem mit meinem Code, ich möchte mit D3D9 ein Device erstellen, bekomme jedoch immer den Fehler D3DERR_INVALIDCALL... Habe bereits versucht mich darüber zu informieren, doch leider nirgendwo etwas gefunden (auch in der DX-Doku nicht, zumindest nichts brauchbares).

    Also ich hab schon folgendes probiert:

    Das CreateDevice-Sample von D3D9 kompiliert und erfolgreich ausgeführt, doch sobald ich den Code in mein Projekt kopiere um zu sehen ob es daran liegt (alten Code auskommentiert, Pointer usw blabla alles angepasst), bekomme ich wieder den Fehler D3DERR_INVALIDCALL... Also ich klatsch euch dann an der Stelle mal den Code hin.

    //	Header-Dateien und Libs alle gelinkt
    //	Vorher bereits global erstellt, wenn auch nicht unbedingt sinnvoll:
    //	IDirect3D9 *g_D3D = NULL;
    //	IDirect3DDevice9 *g_pD3DDevice = NULL;
    //	HWND hWnd;
    //	HRESULT d3drval;
    
    void D3DInitial(void)
    {
    	D3DPRESENT_PARAMETERS d3dpp;
    	ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));
    
    	d3dpp.Windowed = false;
    	d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;
    	d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    	d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    	d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
    
    	g_D3D=Direct3DCreate9(D3D_SDK_VERSION);
    d3drval = g_D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
    			hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    			&d3dpp, &g_pd3dDevice);
    
    			switch(d3drval)
    			{
    			case D3DERR_DEVICELOST:
    				{
    					MessageBox(NULL, "Fehler: Device Lost!", "Fehler!!!", MB_OK | MB_ICONSTOP);
    					break;
    				}			
    			case D3DERR_INVALIDCALL:
    				{
    					MessageBox(NULL, "Fehler: Invalid Call o.O", "Fehler!!!", MB_OK | MB_ICONSTOP);
    					break;
    				}
    			case D3DERR_NOTAVAILABLE:
    				{
    					MessageBox(NULL, "Fehler: Not available o.O", "Fehler!!!", MB_OK | MB_ICONSTOP);
    					break;
    				}
    			case D3DERR_OUTOFVIDEOMEMORY:
    				{
    					MessageBox(NULL, "Fehler: Out of Video Memory o.O", "Fehler!!!", MB_OK | MB_ICONSTOP);
    					break;
    				}	
    			default:
    				{
    					break;
    				}
    			}
    }
    // Wird auch alles notwendige mit Release() wieder freigegeben
    

    Hoffe mal dass der Code einigermaßen lesbar ist und ich nichts vergessen hab hier her zu kopieren, bin halt noch mehr oder weniger Anfänger 😉

    Laut der DX-Doku wird der Fehler meistens durch falsche Pointer verursacht, ich hab doch aber eigentlich alle richtig angegeben, oder?

    Würde mich über ein paar Autodidakt-freundliche Antworten (was hab ich falsch gemacht, warum ist das so, was hätte ich tun können um diesen Fehler zu vermeiden, blabla) sehr freuen. 😃

    Vielen Dank schonmal 🙂

    MfG

    Chickenfield



  • Direct3D auf Debug schalten (Systemsteuerung), Programm im Debug-Modus starten, Debug-Ausgabe beachten (dort steht die Erklärung, warum es nicht geklappt hat)



  • Vielen Dank, ich hab den Fehler gefunden 🙂

    Hatte vergessen der Handle-Variable auf das Fenster auch wirklich das Handle mitzugeben ... ( hWnd = CreateWindowEx(...) )

    MfG
    Chickenfield


Anmelden zum Antworten