Flip Surface im Fenster



  • Hallo,
    ich hoffe mir kann jemand helfen:
    Ich will ein Spiel im Fenstermodus, also nicht Fullscrenn, programmieren, aber ich weiß nicht, wie ich jetzt eine Flip Surface erstelle, denn ein Backbuffer funktioniert ja nicht, so wie im Fullscreen.
    Geht das überhaupt oder muss man da eine andere Variante einschlagen?

    Danke schon mal



  • Wieso soll der BackBuffer nicht windowed funktionieren? Da gibt s nur kein Warten auf das V-Sync - das übernimmt das BS.

    M.T.



  • ich habe folgendes geschrieben:

    // DirectDrawObjekt anlegen    
        if(FAILED(DirectDrawCreateEx(NULL,(void**)&lpDD7,IID_IDirectDraw7,NULL)))
        {  
            return Error("Fehler beim Anlegen "
                         "des DirectDraw-Objekts");
        }
    
        // Kooperationsebene setzen
        if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_NORMAL)))
        {
            return Error("Fehler beim Setzen des Kooperationsebene");    
        }
    
        // 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 | DDSCAPS_VIDEOMEMORY;
    
        //Es soll ein Puffer angelegt werden
        ddsd.dwBackBufferCount = 1;
    
        // Oberfläche anlegen
        if(FAILED(lpDD7->CreateSurface(&ddsd,&lpDDSPrimary,NULL)))
        {
            return Error("Fehler beim Anlegen der primären Oberfläche");
        }
    
        ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
    
        if(FAILED(lpDDSPrimary->GetAttachedSurface(&ddsd.ddsCaps,&lpDDSBackBuffer)))
        {
            return Error("Fehler beim Anlegen des Puffers");
        }
    
        // Clipper anlegen
        if(FAILED(lpDD7->CreateClipper(NULL,&lpDDClipper,NULL)))
        {
            return Error("Fehler beim anlegen des Clipper");
        }
    
        // Clipper mit dem Fenster verbinden
        if(FAILED(lpDDClipper->SetHWnd(0,hWnd)))
        {
            return Error("Fehler bei SetHWnd");    
        }
    
        // Clipper mit der Oberfläche verbinden
        if(FAILED(lpDDSPrimary->SetClipper(lpDDClipper)))
        {
            return Error("Fehler beim Verbinden des Clippers");    
        }
    
        return TRUE;
    

    und es kommt immer die Fehlermeldung:
    "Fehler beim Anlegen der Primären Oberfläche.

    Thx



  • In einer Fensteranwendung gibt es keinen Backbuffer. Du kannst es jedoch mit einer normalen Oberfläche simulieren.



  • Danke erstmal.
    Jetzt würde ich noch gerne wissen, wie ich das ganze mit einer normalen Surface simulieren kann.
    vielleicht könnt ihr mir ja sagen, wo es ein Tutorial dazu gibt.
    Oder vielleicht könnte mir ja jemand, der Zeit hat den Code posten.

    Thx


Anmelden zum Antworten