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.
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) |