Share via


DD_LOCKDATA-Struktur (ddrawint.h)

Die DD_LOCKDATA-Struktur enthält Informationen, die erforderlich sind, um eine Sperre gemäß der Definition der Microsoft DirectDraw-Parameterstrukturen durchzuführen.

Syntax

typedef struct _DD_LOCKDATA {
  PDD_DIRECTDRAW_GLOBAL lpDD;
  PDD_SURFACE_LOCAL     lpDDSurface;
  DWORD                 bHasRect;
  RECTL                 rArea;
  LPVOID                lpSurfData;
  HRESULT               ddRVal;
  VOID                  *Lock;
  DWORD                 dwFlags;
  FLATPTR               fpProcess;
} *PDD_LOCKDATA, DD_LOCKDATA;

Member

lpDD

Verweist auf eine DD_DIRECTDRAW_GLOBAL-Struktur , die das Gerät des Treibers beschreibt.

lpDDSurface

Verweist auf eine DD_SURFACE_LOCAL-Struktur , die die Oberfläche beschreibt– im Fall von LockD3DBuffer, einem Puffer, der dem zu sperrenden Speicherbereich zugeordnet ist.

bHasRect

Gibt an, ob der Bereich in rArea gültig ist. Ein Wert von 0x00000001 gibt einen gültigen Bereich an, 0x00000000 einen ungültigen Bereich an.

rArea

Gibt eine RECTL-Struktur an, die den zu sperrenden Bereich auf der Oberfläche definiert.

lpSurfData

Gibt den Speicherort an, an dem der Treiber einen Zeiger auf den gesperrten Speicherbereich zurückgeben kann.

ddRVal

Gibt den Speicherort an, an dem der Treiber den Rückgabewert des DdLock - oder LockD3DBuffer-Rückrufs schreibt. Ein Rückgabecode von DD_OK zeigt den Erfolg an. Weitere Informationen finden Sie unter Rückgabewerte für DirectDraw.

Lock

Wird von der DirectDraw-API verwendet und sollte nicht vom Treiber ausgefüllt werden.

dwFlags

Gibt eine Bitmaske an, die dem Treiber mitteilt, wie die Speichersperre ausgeführt werden soll. Dieses Element ist ein bitweiser OR mit einem der folgenden Werte:

Flag Bedeutung
DDLOCK_DISCARDCONTENTS
Während dieser Sperre werden keine Annahmen über den Inhalt der Oberfläche oder des Vertexpuffers getroffen. Dies ermöglicht zwei Dinge:
1. Microsoft Direct3D oder der Treiber können einen alternativen Speicherbereich als Vertexpuffer bereitstellen. Dies ist nützlich, wenn der Inhalt des Scheitelpunktpuffers gelöscht und neue Daten ausgefüllt werden soll.
2. Treiber speichern Surface-Daten manchmal in einem neu sortierten Format. Wenn die Anwendung das Surface sperrt, ist der Treiber gezwungen, die Neuanordnung der Oberflächendaten rückgängig zu machen, bevor die Anwendung den Oberflächeninhalt anzeigen kann.

Dieses Flag ist ein Hinweis für den Treiber, dass er den Prozess zum Aufheben der Neuanordnung überspringen kann, da die Anwendung plant, jedes einzelne Pixel in der Oberfläche oder dem gesperrten Rechteck zu überschreiben (und daher alle nicht neu sortierten Pixel trotzdem zu löschen). Anwendungen sollten dieses Flag immer festlegen, wenn sie die gesamte Oberfläche oder das gesperrte Rechteck überschreiben möchten.

DDLOCK_DONOTWAIT Auf IDirectDrawSurface7 - und höheren Schnittstellen ist der Standardwert DDLOCK_WAIT. Wenn Sie die Standardeinstellung überschreiben und die Zeit verwenden möchten, zu der der Accelerator ausgelastet ist (wie durch den DDERR_WASSTILLDRAWING Rückgabecode gekennzeichnet), verwenden Sie dieses Flag.
DDLOCK_EVENT Legen Sie fest, ob ein Ereignishandle an Lock übergeben wird, wodurch das Ereignis ausgelöst wird, wenn der angeforderte Surface-Speicherzeiger zurückgegeben werden kann.
DDLOCK_HASVOLUMETEXTUREBOXRECT Der Treiber sollte einen gültigen Speicherzeiger auf den Anfang der Teilvolumtextur zurückgeben, die im Rechteck (RECTL) in rArea angegeben ist. Der Treiber erhält die Vorder- und Rückseitenkoordinaten des Untervolums aus den oberen 16 Bits der linken und rechten Koordinaten (linke und rechte Elemente von RECTL). Die linken und rechten Koordinaten sind auf die unteren 16 Bits beschränkt. Wenn kein Rechteck angegeben ist, sollte der Treiber einen Zeiger auf den oberen Rand des gesamten Volumes zurückgeben. Dieser Wert ist in DirectX 8.1 und höher verfügbar.
DDLOCK_NODIRTYUPDATE
Wird von der Runtime an den Treiber gesendet, nachdem eine Anwendung die Sperrung eines Speicherbereichs mit dem D3DLOCK_NO_DIRTY_UPDATE-Flags angefordert hat. In diesem Fall sollte der Treiber den gesperrten Speicherbereich nicht als modifiziert betrachten, wenn die Runtime die DdUnlock-Funktion des Treibers aufruft, um eine Oberfläche zu aktualisieren, die diese Region enthält. Vielmehr sollte der Treiber nur die Regionen berücksichtigen, die in früheren Aufrufen seiner D3dDrawPrimitives2-Funktion angegeben wurden, indem er die D3DDP2OP_ADDDIRTYRECT und D3DDP2OP_ADDDIRTYBOX Enumeratoren verwendet, als modifiziert.
Standardmäßig fügt eine Sperre auf einer Oberfläche dieser Oberfläche einen modifiziert Bereich hinzu.
DDLOCK_NOOVERWRITE Wird nur mit Direct3D-Vertexpuffersperren verwendet. Gibt an, dass in IDirect3DDevice7::D rawPrimitiveVB - und IDirect3DDevice7::D rawIndexedPrimitiveVB-Aufrufen (beschrieben in der Direct3D SDK-Dokumentation) seit dem Start des Frames (oder der letzten Sperre ohne dieses Flag) während der Sperre keine Scheitelpunkte geändert werden. Dies kann nützlich sein, wenn nur Daten an den Scheitelpunktpuffer angefügt werden.
DDLOCK_NOSYSLOCK
Gibt an, dass eine systemweite Sperre nicht ausgeführt werden soll, wenn diese Oberfläche gesperrt ist. Dies hat mehrere Vorteile beim Sperren von Videospeicheroberflächen, z. B. die Reaktionsfähigkeit des Cursors, die Möglichkeit, mehr Microsoft Windows-Funktionen aufzurufen, und das debuggen zu erleichtern. Eine Anwendung, die dieses Flag angibt, muss jedoch eine Reihe von Bedingungen erfüllen, die in der Hilfedatei dokumentiert sind.
Dieses Flag kann beim Sperren des primären nicht angegeben werden.
DDLOCK_OKTOSWAP Identisch mit DDLOCK_DISCARDCONTENTS.
DDLOCK_READONLY Die gesperrte Oberfläche wird nur aus gelesen. Unter Windows 2000 und höher wird dieses Flag nie festgelegt.
DDLOCK_SURFACEMEMORYPTR Der Treiber sollte einen gültigen Speicherzeiger an den oberen Rand des in rArea angegebenen Rechtecks zurückgeben. Wenn kein Rechteck angegeben ist, sollte der Treiber einen Zeiger auf den oberen Rand der Oberfläche zurückgeben.
DDLOCK_WAIT Legen Sie fest, um anzugeben, dass Lock warten soll, bis ein gültiger Speicherzeiger abgerufen werden kann, bevor sie zurückgibt. Wenn dieses Bit festgelegt ist, gibt Lock nie DDERR_WASSTILLDRAWING zurück.
DDLOCK_WRITEONLY Die zu sperrende Oberfläche wird nur auf geschrieben. Unter Windows 2000 und höher wird dieses Flag nie festgelegt.

fpProcess

Gibt einen Zeiger auf eine Benutzermoduszuordnung des Arbeitsspeichers des Treibers an. Der Treiber führt diese Zuordnung in DdMapMemory aus. Nur Windows 2000 und höher.

Anforderungen

   
Kopfzeile ddrawint.h (include Winddi.h)

Weitere Informationen

DdLock

DdMapMemory

LockD3DBuffer