VIDEOMEMORY-Struktur (ddrawint.h)
Die VIDEOMEMORY-Struktur ermöglicht es dem Treiber, seinen Anzeigespeicher in Heaps zu verwalten.
Syntax
typedef struct _VIDEOMEMORY {
DWORD dwFlags;
FLATPTR fpStart;
union {
FLATPTR fpEnd;
DWORD dwWidth;
};
DDSCAPS ddsCaps;
DDSCAPS ddsCapsAlt;
union {
#if ...
_VMEMHEAP *lpHeap;
#else
struct _VMEMHEAP *lpHeap;
#endif
DWORD dwHeight;
};
} VIDEOMEMORY;
Member
dwFlags
Gibt eine Reihe von Flags an, die diesen bestimmten Abschnitt des Anzeigespeichers beschreiben. Dieser Member kann ein bitweiser ODER mit einem der folgenden Werte sein:
Flag | Bedeutung |
---|---|
VIDMEM_ISLINEAR | Der Anzeigespeicher ist ein zusammenhängender Speicherblock. |
VIDMEM_ISRECTANGULAR | Der Anzeigespeicher ist rechteckig. |
VIDMEM_ISHEAP | Dieses Flag ist für die Systemverwendung reserviert und sollte vom Treiber ignoriert werden. |
VIDMEM_ISNONLOCAL | Der Heap befindet sich im nichtlokalen Speicher (AGP). |
VIDMEM_ISWC | Der Treiber hat die Schreibkombination für den Anzeigespeicher in diesem Heap aktiviert. Das Kombinieren von Schreibvorgängen ist ein spezieller Zwischenspeichermodus in Prozessoren der Pentium Pro-Klasse, der Schreibvorgänge in die gleiche Cachezeile batchiert, sodass sie in einer einzelnen Busuhr übertragen werden können. Das Kombinieren von Schreibvorgängen behält die Reihenfolge der Schreibvorgänge nicht bei, ein Kompromiss, der normalerweise für Framepuffer akzeptabel ist. Weitere Informationen zum Kombinieren von Schreibvorgängen finden Sie in der Intel-Dokumentation. Dieses Flag kann nur verwendet werden, wenn das VIDMEM_ISNONLOCAL-Flag ebenfalls festgelegt ist. |
VIDMEM_HEAPDISABLED | Die Microsoft DirectDraw-Runtime verwendet dieses Flag, um einen Heap zu deaktivieren, wenn bei der Initialisierung des Heaps ein Fehler aufgetreten ist. Dies tritt höchstwahrscheinlich bei einem AGP-Heap auf. Der Treiber sollte dieses Bit nicht festlegen. |
fpStart
Zeigt auf die Startadresse eines Speicherbereichs im Heap.
fpEnd
Zeigt auf die Endadresse eines Speicherbereichs, wenn der Heap linear ist. Diese Adresse ist inklusive, d. h. sie gibt die letzte gültige Adresse im Bereich an. Daher ist die Anzahl der von fpStart und fpEnd angegebenen Bytes (fpEnd - fpStart + 1).
dwWidth
Gibt die Breite des Speicherabschnitts in Bytes an, auf den fpStart verweist. Dieser Member sollte nur verwendet werden, um rechteckige Speicherbereiche zu beschreiben.
ddsCaps
Gibt eine DDSCAPS-Struktur an, in der der Treiber die Funktionen zurückgibt, für die dieser Speicherabschnitt nicht verwendet werden kann.
ddsCapsAlt
Gibt eine DDSCAPS-Struktur an, in der der Treiber die Funktionen zurückgibt, für die dieser Speicherabschnitt nicht verwendet werden kann, wenn beim ersten Durchlauf kein anderer Arbeitsspeicher gefunden wird.
lpHeap
Für die Systemverwendung reserviert und sollte vom Treiber ignoriert werden.
dwHeight
Gibt die Höhe des Speicherblocks an, auf den fpStart verweist. Dieser Member sollte nur verwendet werden, um rechteckige Speicherbereiche zu beschreiben.
Hinweise
Unter Microsoft Windows 2000 und höher heißt die Datenstruktur VIDEOMEMORY und unter Windows 98/Me wird die Datenstruktur VIDMEM genannt.
GDI weist ein Array von VIDEOMEMORY-Strukturen zu und übergibt es an den zweiten Aufruf der DrvGetDirectDrawInfo-Funktion des Treibers. Der Treiber sollte die entsprechenden Elemente jeder Struktur ausfüllen, um jeden bestimmten Abschnitt des Arbeitsspeichers zu beschreiben. Die Liste enthält eine vollständige Beschreibung des Offscreenspeichers des Treibers.
DirectDraw scannt durch, um die Oberflächen in der Reihenfolge zuzuordnen, in der die Speicherheaps des Anzeigespeichers aufgelistet werden. Heaps werden in einem Array von VIDEOMEMORY-Strukturen verwaltet. Der zuerst zugewiesene Arbeitsspeicher ist der Arbeitsspeicher, auf den zuerst zugegriffen wird. Die VIDEOMEMORY-Struktur richtet bestimmte Startpunkte ein und bestimmt die Menge des Arbeitsspeichers auf der Oberfläche und was mit der Oberfläche nicht möglich ist. DirectDraw verwaltet sie durch Unterzuweisung und Zuordnung von Arbeitsspeicher, d. h. erstellen und zerstören Oberflächen unter der Zuständigkeit jedes Heaps. Physische Grenzwerte bestimmen, wie diese Attribute eingerichtet werden.
Der Heap-Manager von DirectDraw durchläuft zwei Durchläufe die VIDEOMEMORY-Strukturen. Das ddsCaps-Element gibt directDraw an, wofür der Arbeitsspeicher im Heap beim ersten Durchlauf nicht verwendet werden kann. Wenn der Heap beispielsweise gerade groß genug für einen Backpuffer war, könnten Sprites beim ersten Durchlauf von der Zuordnung ausgeschlossen werden, indem das DSCAPS_OFFSCREENPLAIN-Flag in der DDSCAPS-Struktur festgelegt wird. Auf diese Weise würden sich andere Oberflächen mit Sprites füllen, während der Rückpuffer für das Seitendrehen beibehalten wird. Das ddsCapsAlt-Element kann so festgelegt werden, dass Sprites im zweiten Durchlauf zugelassen werden (durch Entfernen des flags DSCAPS_OFFSCREENPLAIN). Dadurch können Heaps bevorzugt für ihre höchste und beste Verwendung verwendet werden, ohne alternative Verwendungsmöglichkeiten auszuschließen. Durch sorgfältige Auswahl der Zuordnungsreihenfolge (z. B. durch Auflisten des Letzten Puffers) kann die Notwendigkeit, nach ddsCaps und ddsCapsAlt zu sortieren, manchmal beseitigt werden.
Anforderungen
Kopfzeile | ddrawint.h (include Winddi.h) |