[DirectDraw] Wie von Vollbild in Fenstermodus?



  • Hi.

    Ich habe momentan eine DirectDraw die im Vollbild arbeitet.
    Fürs debugging brauch ich aber mal vorübergehend als Fenster.

    Aber ich bekomme immer "Fehler beim Anlegen der primären Oberfläche"
    von der ganz unten stehenden CreateSurface() Funktion.

    Kann mir jemand sagen was ich Nuub falsch mache?

    // Kooperationsebene setzen
        if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_NORMAL )))
    //    if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT )))
        {
            Error("Fehler beim Setzen des <SetCooperativeLevels>");    
    		return FALSE;
        }
    
        // Auflösung und Farbtiefe setzen
        if(FAILED(lpDD7->SetDisplayMode(SCR_WIDTH,SCR_HEIGHT,COLOR_DEPTH,0,0)))
        {
            Error("Fehler beim Setzen des <SetDisplayModes>");    
    		return FALSE;
        }
    
        // Struktur zur Beschreibung einer Oberfläche
        DDSURFACEDESC2 ddsd;
    
        // Initialisieren und Größe festlegen
        ZeroMemory(&ddsd,sizeof(ddsd));
        ddsd.dwSize = sizeof(ddsd);
    
        // Die Angabe wdCaps soll berücksichtigt werden
        ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
    
        // Es soll eine primäre Oberfläche angelegt werden
        ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
    
        // Es soll ein Puffer angelegt werden
        ddsd.dwBackBufferCount = 1;	
    
    	// Oberfläche anlegen
        if(FAILED(lpDD7->CreateSurface(&ddsd,&lpDDSPrimary,NULL)))
        {
            Error("Fehler beim Anlegen der primären Oberfläche");
    		return FALSE;
        }
    


  • Die prim. Surface darf nur den Primary-Parameter haben, weil sie

    DDSCAPS_FLIP | DDSCAPS_COMPLEX
    

    nicht mit dem kooperativen Modus vereinbar sind.
    Dann solltest du dir dafür eine extra Offscreen Surface erstellen,
    (die Backbuffersurface funktioniert ja hier nicht) und in der zeichnen und diese dann in den PrimaryBuffer blitten, dass damit der Fensterinhalt ausgefüllt wird.



  • Müsste aber eigentlich doch auch in der SDK Doku stehen? 😎

    Bye, TGGC (Demo or Die)


Anmelden zum Antworten