Surfaces in DirectDraw7
Unterpunkte dieser Seite
Einleitung
Die Schnittstellenmethode CreateSurface()
Die Primäre Oberfläche
Oberflächen aufräumen
Einleitung
Die Schnittstellenmethode CreateSurface()
Die IDirectDraw Schnittstelle und die IDirectDraw7 Schnittstelle des Direct Draw COM Objektes besitzen beide die Methode CreateSurface, mit der sich alle Surfaces in DirectDraw anlegen lassen. Da es unterschiedliche Arten von Oberflächen gibt (Primäre Oberfläche, verschieden größen, verschieden Speicherorte) aber CreateSurface() alle diese Oberflächen erzeugt, gibt es eine Struktur, die Oberflächen beschreibt. Man erzeugt eine Strukturvariable vom Datentyp dieser Struktur. Dann füllt man diese Struktur aus ähnlich wie ein Bestellformular, man macht alle Angaben über die Oberfläche, die von CreateSurface() geliefert werden soll. Dann übergibt man die Surfacedeskriptor Struktur an CreateSurface() als ersten Parameter. CreateSurface() erzeugt dann genau die gewünschte Oberfläche und schreibt einen Zeiger in den zweiten Parameter. Der zweite Parameter ist daher so etwas wie der Returnwert der Methode. Der dritte Parameter ist reserviert und muss immer auf NULL gesetzt werden. (wahrscheinlich, damit die Funktion nachträglich erweitert werden kann.)
Die Primäre Oberfläche
Jede DirectDraw Anwendung muss genau eine Primäre Oberfläche anlegen. Die PrimäreOberfläche muss im Grafikkartenspeicher direkt auf dem Videoadapter liegen.
/* pointer to a valid IDirectDraw7 Interface */
LPDIRECTDRAW7 lpIDirectDraw7Interface = NULL;
/* pointer on primary surface */
LPDIRECTDRAWSURFACE7 lpDDSPrimary = NULL;
/* structure that describes surfaces */
DDSURFACEDESC2 DDsd;
/* create DirectDraw COM Object and store pointer
to IDirectDraw7 Interface into lpIDirectDraw7Interface */
(für diesen Schritt siehe hier)
/* remove old memory content that might disturb the call to CreateSurface */
ZeroMemory(&DDsd, sizeof(DDsd));
/* safe the structure size for versioning reasons */
DDsd.dwSize = sizeof(DDsd);
/* describe the PrimarySurface */
/* consider ddsCaps field */
DDsd.dwFlags = DDSD_CAPS;
/* fill ddsCaps field, we want to create a primary surface that
is not allowed to be created anywhere else than in videomemory */
DDsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
/* create the PrimarySurface */
lpIDirectDraw7Interface -> CreateSurface(&DDsd, &lpDDSPrimary, NULL);
Oberflächen aufräumen
Die Interfaces der Oberflächen COM Objecte besitzen alle die Paremeterlose Methode Release() mit der man die Interfaces und die COM Objekte zerstört.
zum Seitenanfang
zur DirectX Seite
zur Hauptseite
Letzte Änderung: 10.11.2005