Freigeben über


PFND3DDDI_LOCK Rückruffunktion (d3dumddi.h)

Die Lock-Funktion sperrt die angegebene Ressource oder eine Oberfläche innerhalb der Ressource.

Syntax

PFND3DDDI_LOCK Pfnd3dddiLock;

HRESULT Pfnd3dddiLock(
  HANDLE hDevice,
  D3DDDIARG_LOCK *unnamedParam2
)
{...}

Parameter

hDevice

Ein Handle für das Anzeigegerät (Grafikkontext).

unnamedParam2

pData- [in, out]

Ein Zeiger auf eine D3DDDIARG_LOCK Struktur, die die Ressource oder Oberfläche innerhalb der zu sperrenden Ressource beschreibt.

Rückgabewert

Lock gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Die Ressource wurde erfolgreich gesperrt.
E_OUTOFMEMORY Die Sperre konnte den erforderlichen Arbeitsspeicher nicht zuordnen, damit er abgeschlossen werden kann.
D3DDDIERR_WASSTILLDRAWING Die Ressource war nicht im Leerlauf, wenn die Microsoft Direct3D-Laufzeit die Lock-Funktion mit dem Im Flags-Element von D3DDDIARG_LOCK festgelegten Bitfeld-Flag "DoNotWait" aufgerufen hat.

Bemerkungen

Die Microsoft Direct3D-Laufzeit ruft die Lock-Funktion des Benutzermodus auf, um eine Ressource oder eine Oberfläche innerhalb der Ressource zu sperren. Diese gesperrte Ressource oder Oberfläche kann mithilfe von Lese- und Schreibvorgängen aus der CPU gelesen oder in diese geschrieben werden. Wenn die Laufzeit Lockaufruft, muss der Anzeigetreiber für den Benutzermodus die pfnLockCb- Rückruffunktion aufrufen, um eine Zuordnung zu sperren, die der Ressource oder Oberfläche entspricht. Beachten Sie, dass der Benutzermodusanzeigetreiber mehrere Zuordnungen für jede Ressource oder Oberfläche zuordnen kann, der Anzeigetreiber für den Benutzermodus möglicherweise erforderlich ist, um den Zuordnungszeiger, der von pfnLockCb zurückgegeben wird, entsprechend zu konvertieren oder zu verarbeiten, bevor der aufruf der Lock an die Laufzeit zurückgegeben wird.

In der Regel werden Aufrufe an Lock gefolgt von übereinstimmenden Aufrufen der Unlock-Funktion des Treibers, bevor der Treiber Aufrufe an seine draw-primitiven Funktionen empfängt (d. a. Aufrufe an DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitiveund DrawPrimitive2). Mit dieser Reihenfolge wird sichergestellt, dass ein Treiber nie von einer gesperrten Ressource abgerufen werden soll. Bei der Durchführung von Softwaretransformationen und Beleuchtung muss die Laufzeit jedoch eine der Draw-Primitive-Funktionen des Treibers aufrufen, bevor eine Ressource entsperrt wird (derzeit weisen nur Vertexpuffer dieses Verhalten auf). Die Laufzeit markiert Vertexpuffer, auf denen dieses ungewöhnliche Verhalten mit dem MightDrawFromLocked- Bitfeld-Flag im Flags Member der D3DDDIARG_CREATERESOURCE- und D3DDDIARG_LOCK-Strukturen auftreten kann (d. a. sowohl beim Erstellen als auch zur Sperrzeit). Wenn die Hardware aktiv aus einem gesperrten Vertexpuffer gerendert wird, muss der Treiber keine spezielle Aktion ausführen, da die Laufzeit keine Daten im gesperrten Vertexpuffer überschreibt.

Die Laufzeit ruft die Lock--Funktion des Benutzermodus auf, um auch vorinstallierte Systemspeicheroberflächen zu sperren. Dieser Vorgang ermöglicht es dem Benutzermodusanzeigetreiber, Verweise auf solche Oberflächen, die sich möglicherweise im Hardwarebefehlsstream befinden, ordnungsgemäß zu synchronisieren. Der Anzeigetreiber für den Benutzermodus kann die Synchronisierung ausführen, indem:

  • Leeren (d. h. Aufrufen der pfnRenderCb- Rückruffunktion) der Laufzeit alle ausstehenden Befehle nach Bedarf.
  • Aufrufen pfnLockCb mit dem entsprechenden Zuordnungshandle für Befehle, die bereits an die Hardware übermittelt wurden.
Der Anzeigetreiber für den Benutzermodus gibt einen Zeiger auf den Speicher für die gesperrte Oberfläche und die Neigung der Oberfläche in der pSurfData und Pitch Member der D3DDDIARG_LOCK Struktur zurück. Bei vorab zugewiesenen Systemspeicheroberflächen ignoriert die Laufzeit jedoch den vom Treiber festgelegten Speicher und den Pitch, obwohl der Treiber den Lock Aufruf (und somit nicht mehr an die Anwendung zurückgreift) fehlschlagen kann. Die Laufzeit legt die NotifyOnly Bitfeldkennzeichnung im Flags Element der D3DDDIARG_LOCK-Struktur fest, um Lock Aufrufe zu unterscheiden, die vorab zugewiesene Systemspeicheroberflächen von anderen Sperren Aufrufen sperren.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform- Universal
Header- d3dumddi.h (include D3dumddi.h)

Siehe auch

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb