D3D10_MAP-Enumeration (d3d10.h)

Gibt eine Ressource an, auf die von der CPU zum Lesen und Schreiben zugegriffen werden soll. Anwendungen können eines oder mehrere dieser Flags kombinieren.

Syntax

typedef enum D3D10_MAP {
  D3D10_MAP_READ = 1,
  D3D10_MAP_WRITE = 2,
  D3D10_MAP_READ_WRITE = 3,
  D3D10_MAP_WRITE_DISCARD = 4,
  D3D10_MAP_WRITE_NO_OVERWRITE = 5
} ;

Konstanten

 
D3D10_MAP_READ
Wert: 1
Die Ressource wird zum Lesen zugeordnet. Die Ressource muss mit Lesezugriff erstellt worden sein (siehe D3D10_CPU_ACCESS_READ).
D3D10_MAP_WRITE
Wert: 2
Die Ressource wird zum Schreiben zugeordnet. Die Ressource muss mit Schreibzugriff erstellt worden sein (siehe D3D10_CPU_ACCESS_WRITE).
D3D10_MAP_READ_WRITE
Wert: 3
Die Ressource wird zum Lesen und Schreiben zugeordnet. Die Ressource muss mit Lese- und Schreibzugriff erstellt worden sein (siehe D3D10_CPU_ACCESS_READ und D3D10_CPU_ACCESS_WRITE).
D3D10_MAP_WRITE_DISCARD
Wert: 4
Die Ressource wird zum Schreiben zugeordnet. der vorherige Inhalt der Ressource ist nicht definiert. Die Ressource muss mit Schreibzugriff erstellt worden sein (siehe D3D10_CPU_ACCESS_WRITE).
D3D10_MAP_WRITE_NO_OVERWRITE
Wert: 5
Die Ressource wird zum Schreiben zugeordnet. der vorhandene Inhalt der Ressource kann nicht überschrieben werden (siehe Hinweise). Dieses Flag ist nur für Scheitel- und Indexpuffer gültig. Die Ressource muss mit Schreibzugriff erstellt worden sein (siehe D3D10_CPU_ACCESS_WRITE). Kann nicht für eine Ressource verwendet werden, die mit dem flag D3D10_BIND_CONSTANT_BUFFER erstellt wurde.

Hinweise

Diese Enumeration wird in ID3D10Buffer::Map, ID3D10Texture1D::Map, ID3D10Texture2D::Map und ID3D10Texture3D::Map verwendet.

Bedeutung von D3D10_MAP_WRITE_NO_OVERWRITE

D3D10_MAP_WRITE_NO_OVERWRITE bedeutet, dass die Anwendung verspricht, nicht in Daten zu schreiben, die von der IA-Phase ( Input Assembler ) verwendet werden. Im Gegenzug ermöglicht die GPU der Anwendung, in andere Teile desselben Puffers zu schreiben. Die Anwendung muss sicherstellen, dass sie keine Daten überschreibt, die von der IA-Phase verwendet werden.

Betrachten Sie beispielsweise den Puffer, der im folgenden Diagramm dargestellt ist. Wenn ein Draw-Aufruf ausgegeben wurde, der die Scheitelpunkte 4 bis 6 verwendet, muss eine Anwendung, die Map in diesem Puffer aufruft, sicherstellen, dass sie nicht in die Scheitelpunkte schreibt, auf die der Draw-Aufruf während des Renderings zugreift.

Diagramm der Vertexdaten in verschiedenen Nutzungsphasen Es kann jedoch schwierig sein, dies sicherzustellen, da die GPU häufig viele Frames hinter der CPU liegt, in Bezug auf den Frame, den sie gerade verarbeitet. Das Nachverfolgen, welche Abschnitte einer Ressource aufgrund von Aufrufen vor 2 bis 5 Frames verwendet werden, ist schwierig und fehleranfällig. Aus diesem Grund wird empfohlen, dass Anwendungen nur in die nicht initialisierten Teile einer Ressource schreiben, wenn sie D3D10_MAP_WRITE_NO_OVERWRITE verwenden.

Allgemeine Verwendung von D3D10_MAP_WRITE_DISCARD mit D3D10_MAP_WRITE_NO_OVERWRITE

D3D10_MAP_WRITE_DISCARD und D3D10_MAP_WRITE_NO_OVERWRITE werden normalerweise in Verbindung mit dynamischen Index-/Vertexpuffern verwendet, obwohl sie auch mit dynamischen Texturen verwendet werden können.

Eine häufige Verwendung dieser beiden Flags umfasst das Auffüllen dynamischer Index-/Vertexpuffer mit Geometrie, die von der aktuellen Position der Kamera aus sichtbar ist. Wenn Daten zum ersten Mal in den Puffer eines bestimmten Frames eingegeben werden, wird Map mit D3D10_MAP_WRITE_DISCARD aufgerufen. Dadurch wird der vorherige Inhalt des Puffers ungültig. Der Puffer wird dann mit allen verfügbaren Daten gefüllt.

Nachfolgende Schreibvorgänge in den Puffer innerhalb desselben Frames sollten D3D10_MAP_WRITE_NO_OVERWRITE verwenden. Dadurch kann die CPU auf eine Ressource zugreifen, die möglicherweise von der GPU verwendet wird, solange die zuvor beschriebenen Einschränkungen eingehalten werden.

Anforderungen

Anforderung Wert
Header d3d10.h

Weitere Informationen

Ressourcenaufzählungen