DirectX CreateDevice()



  • Eine Programm, das ich geschrieben habe funktioniert bei dem Rechner von einem Freund nicht. Die CreateDevice()-Funktion schlägt immer fehl:

    void D3D_Init( void)
    {
    	//HRESULT hr;
    
    	//Direct3D SDK installieren
        g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
    
    	//Displaymode abfragen
        D3DDISPLAYMODE d3ddm;
    
        g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );
    
    	g_pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, 
    												d3ddm.Format, D3DUSAGE_DEPTHSTENCIL,
    												D3DRTYPE_SURFACE, D3DFMT_D16 );
    
    	D3DCAPS9 d3dCaps;
    
    	g_pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dCaps );
    
    	DWORD dwBehaviorFlags = 0;
    
    	if( d3dCaps.VertexProcessingCaps != 0 )
    		dwBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
    	else
    		dwBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    
    	//Presentparameters setzen
    	D3DPRESENT_PARAMETERS d3dpp;
    	memset(&d3dpp, 0, sizeof(d3dpp));
    	static RECT rect;
    	GetClientRect(hChild,&rect);
    
        d3dpp.BackBufferFormat       = d3ddm.Format;
    	d3dpp.SwapEffect             = D3DSWAPEFFECT_DISCARD;
    	d3dpp.Windowed               = TRUE;
    	d3dpp.BackBufferWidth        = rect.right;
    	d3dpp.BackBufferHeight       = rect.bottom;
        d3dpp.EnableAutoDepthStencil = TRUE;
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
        d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_IMMEDIATE;
    	d3dpp.MultiSampleType        = D3DMULTISAMPLE_4_SAMPLES;
    
        if( FAILED(g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hChild,
                                          dwBehaviorFlags, &d3dpp, &g_pd3dDevice ) ) )
    	{
    		d3dpp.MultiSampleType        = D3DMULTISAMPLE_2_SAMPLES;
    		 if( FAILED(g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hChild,
                                          dwBehaviorFlags, &d3dpp, &g_pd3dDevice ) ) )
    		{
    			d3dpp.MultiSampleType        = D3DMULTISAMPLE_4_SAMPLES;
    			if( FAILED(g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hChild,
                                          dwBehaviorFlags, &d3dpp, &g_pd3dDevice ) ) )
    			{
    				MessageBox(NULL, "Directx-CreateDeviceFehler fehlgeschlagen!","Achtung - TA",MB_OK | MB_ICONINFORMATION);
    				return;
    			}
    		}
    
    	}
    ....
    

    Woran kann das liegen, bzw. wie kann ich den Fehler eingrenzen.



  • Das übliche: Debug Libs nutzen, Debug Output hochdrehen, Rückgabewerte überprüfen.



  • Nur ein Tipp: probiere mal die Anwendung als Fullscreen
    Ansonsten wie schon gesagt wurde: Rückgabewerte prüfen


Anmelden zum Antworten