Sperren von Ressourcen (Direct3D 9)

Das Sperren einer Ressource bedeutet, cpu-Zugriff auf ihren Speicher zu gewähren. Die folgenden Sperroptionen sind für Ressourcen definiert:

  • D3DLOCK_DISCARD
  • D3DLOCK_READONLY
  • D3DLOCK_NOOVERWRITE
  • D3DLOCK_NOSYSLOCK
  • D3DLOCK_NO_DIRTY_UPDATE

Ausführliche Informationen zum Sperren von Flags und deren Beziehung zu bestimmten Ressourcen finden Sie auf den Referenzseiten zu den einzelnen Ressourcensperrmethoden. Anwendungsentwickler sollten beachten, dass die Flags D3DLOCK_DISCARD, D3DLOCK_READONLY und D3DLOCK_NOOVERWRITE nur Hinweise sind. Bei der Laufzeit wird nicht überprüft, ob Anwendungen die in diesen Flags angegebene Funktionalität verwenden. Eine Anwendung, die D3DLOCK_READONLY angibt, dann aber in die Ressource schreibt, sollte nicht definierte Ergebnisse erwarten. Im Allgemeinen ist das Arbeiten mit Sperrflags, einschließlich der Sperrverwendungsflags, in späteren Releases nicht garantiert und kann zu erheblichen Leistungseinbußen führen.

Auf einen Sperrvorgang folgt ein Entsperrvorgang. Beispielsweise verzichtet die Anwendung nach dem Sperren einer Textur anschließend auf den direkten Zugriff auf gesperrte Texturen, indem sie sie entsperrt. Zusätzlich zum Gewähren des Prozessorzugriffs werden alle anderen Vorgänge, die diese Ressource betreffen, für die Dauer einer Sperre serialisiert. Nur eine einzelne Sperre für eine Ressource ist zulässig, auch für nicht überlappende Regionen, und es können keine Beschleunigungsvorgänge auf einer Oberfläche ausgeführt werden, während ein Sperrvorgang auf dieser Oberfläche aussteht.

Jede Ressourcenschnittstelle verfügt über Methoden zum Sperren der enthaltenen Puffer. Jede Texturressource kann auch einen Teil dieser Ressource sperren. 2D-Ressourcen (Oberflächen) ermöglichen das Sperren von Unterrechtecken, und Volumeressourcen ermöglichen das Sperren von Untervolumes oder Feldern. Jede Sperrmethode gibt eine Struktur zurück, die einen Zeiger auf den Speicher enthält, der die Ressource sichert, und Werte, die je nach Ressourcentyp die Abstände zwischen Zeilen oder Datenebenen darstellen. Ausführliche Informationen finden Sie in den Methodenlisten für die Ressourcenschnittstellen. Der zurückgegebene Zeiger zeigt immer auf das byte oben links in den gesperrten Unterregionen.

Wenn Sie mit Index- und Vertexpuffern arbeiten, können Sie mehrere Sperraufrufe ausführen. Sie müssen jedoch sicherstellen, dass die Anzahl der Sperranrufe mit der Anzahl der Entsperrungsaufrufe übereinstimmt.

Der DXTn speichert Pixel in codierten 4x4-Blöcken und kann nur an 4x4-Grenzen gesperrt werden.

Direct3D-Ressourcen