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