[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_COMPLEXnicht 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)