Fullscreen



  • Ich habe bei meiner Anwendung einfach

    d3dpp.Windowed               = TRUE;
    

    mit

    d3dpp.Windowed               = FALSE;
    

    ausgetauscht, um eine Fullscreenanwendung zu erhalten. Doch beim Debugen kommt folgende Meldung:

    Unbehandelte Ausnahme bei 0x004045be in Simulation.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.

    Der Debuger gibt dabei einen Hinweis auf diese Stelle:

    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                             D3DCOLOR_COLORVALUE(1.0f,1.0f,1.0f,1.0f), 1.0f, 0 );
    

    Hat jmd. von euch eine Idee, woran es liegen kann bzw. wie ich das Problem beheben kann.

    Ich bedanken mich für jede Antwort !



  • sieht so aus als haettest du keinen backbuffer.
    zeig mal den restlichen inhalt von "d3dpp".



  • g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
    
    	if( g_pD3D == NULL )
    	{
    
    		return;
    	}
    
    	//Displaymode abfragen
        D3DDISPLAYMODE d3ddm;
    
        if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
    	{
    
    		return;
    	}
    
    	HRESULT hr;
    
    	//Deviceformat abfragen
    	if( FAILED( hr = g_pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, 
    												d3ddm.Format, D3DUSAGE_DEPTHSTENCIL,
    												D3DRTYPE_SURFACE, D3DFMT_D16 ) ) )
    	{
    		if( hr == D3DERR_NOTAVAILABLE )
    
    			return;
    	}
    
    	D3DCAPS9 d3dCaps;
    
    	if( FAILED( g_pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, 
    		                               D3DDEVTYPE_HAL, &d3dCaps ) ) )
    	{
    		// TO DO: Respond to failure of GetDeviceCaps
    		return;
    	}
    
    	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));
    
        d3dpp.BackBufferFormat       = d3ddm.Format;
    	d3dpp.SwapEffect             = D3DSWAPEFFECT_DISCARD;
    	d3dpp.Windowed               = FALSE;
        d3dpp.EnableAutoDepthStencil = TRUE;
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
        d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_IMMEDIATE;
    
        if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd,
                                          dwBehaviorFlags, &d3dpp, &g_pd3dDevice ) ) )
    	{
    
    		return;
    	}
    

  • Mod

    pressure schrieb:

    Ich habe bei meiner Anwendung einfach

    d3dpp.Windowed               = TRUE;
    

    mit

    d3dpp.Windowed               = FALSE;
    

    ausgetauscht, um eine Fullscreenanwendung zu erhalten. Doch beim Debugen kommt folgende Meldung:

    Unbehandelte Ausnahme bei 0x004045be in Simulation.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.

    Der Debuger gibt dabei einen Hinweis auf diese Stelle:

    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                             D3DCOLOR_COLORVALUE(1.0f,1.0f,1.0f,1.0f), 1.0f, 0 );
    

    Hat jmd. von euch eine Idee, woran es liegen kann bzw. wie ich das Problem beheben kann.

    Ich bedanken mich für jede Antwort !

    Was gibt denn die debugausgabe von d3d aus?
    ist g_pd3dDevice 0 ?



  • D3DPRESENT_PARAMETERS d3dpp;
        memset(&d3dpp, 0, sizeof(d3dpp));
    
        d3dpp.BackBufferFormat       = d3ddm.Format;
        d3dpp.SwapEffect             = D3DSWAPEFFECT_DISCARD;
        d3dpp.Windowed               = FALSE;
        d3dpp.EnableAutoDepthStencil = TRUE;
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
        d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_IMMEDIATE;
    

    Du solltest in den D3DPRESENT_PARAMETERS die Eintraege BackBufferWidth und BackBufferHeight setzen.


Anmelden zum Antworten