Freigeben über


D3DHAL_DP2TEXBLT Struktur (d3dhal.h)

Die D3DHAL_DP2TEXBLT-Struktur wird für Textur-Blts verwendet, wenn D3dDrawPrimitives2 auf das D3DDP2OP_TEXBLT-Befehlstoken antwortet.

Syntax

typedef struct _D3DHAL_DP2TEXBLT {
  DWORD dwDDDestSurface;
  DWORD dwDDSrcSurface;
  POINT pDest;
  RECTL rSrc;
  DWORD dwFlags;
} D3DHAL_DP2TEXBLT;

Angehörige

dwDDDestSurface

Gibt den Handle für die Zieltextur an.

dwDDSrcSurface

Gibt das Handle für die Quelltextur an.

pDest

Gibt den Zielpunkt an, an dem das Blt ausgeführt werden soll, d. h. den Punkt auf der Zieloberfläche (dwDDDestSurface), um das Blt zu beginnen. Diese x und y Member der POINT-Struktur werden in Bildschirmkoordinaten angegeben.

rSrc

Gibt das Rechteck an, das in der Quelltextur eingeblenkt werden soll, d. h. das Quellrechteck in der Quelloberfläche (dwDDSrcSurface), aus dem ein Blt entfernt werden soll.

dwFlags

Reserviert für die Systemverwendung.

Bemerkungen

Der D3dCreateSurfaceEx Rückruf erstellt die kleinen ganzzahligen Handles für die Texturen, die als Quell- und Zieltexturen für Textur-Blts verwendet werden können.

Die D3DHAL_DP2TEXBLT-Struktur wird mit einem D3DDP2OP_TEXBLT Befehlsstreamtoken verwendet, um die Treiber zu informieren, einen Blt-Vorgang von einer Quelltextur zu einer Zieltextur auszuführen. Eine Textur kann auch eine kubische Umgebungszuordnung sein. Der Treiber sollte ein durch rSrc- in der Quelltextur angegebenes Rechteck an die position kopieren, die durch pDest- in der Zieltextur angegeben wird. Die Ziel- und Quelltexturen werden durch Handles identifiziert, mit denen der Treiber während der Texturerstellungszeit benachrichtigt wurde. Wenn der Treiber Texturen verwalten kann, ist es möglich, dass der Zielpunkt 0 ist. Dies gibt dem Treiber an, dass sie die Textur vorab in den Videospeicher (oder überall dort, wo die Hardware effizient Texturen von) laden sollte. In diesem Fall kann der Treiber rSrc- und pDest-ignorieren.

Beachten Sie, dass für MIP zugeordnete Texturen nur eine D3DDP2OP_TEXBLT Anweisung in den D3dDrawPrimitives2 Befehlsstream eingefügt wird. In diesem Fall wird erwartet, dass der Treiber alle in der Textur vorhandenen MIP-Kartenebenen einblenkt. Die regionen, die in MIP-Kartenunterebenen kopiert werden sollen, können durch Dividieren rSrc undpDest durch 2 auf jeder Ebene abgerufen werden.

Es ist möglich, dass die Quell- und Zieltexturen unterschiedliche Anzahl von MIP-Kartenebenen enthalten können. In diesem Fall wird erwartet, dass der Treiber die gemeinsamen Ebenen einblenkt. Wenn beispielsweise eine Quelltextur von 256 x 256 8 MIP-Kartenebenen aufweist und das Ziel eine 64x64-Textur mit 6 Ebenen ist, sollte der Treiber die 6 entsprechenden Ebenen aus der Quelle blen. Der Treiber kann erwarten, dass die Dimensionen der obersten MIP-Ebene der Zieltextur immer kleiner oder gleich den Dimensionen der obersten MIP-Ebene der Quelltextur sind.

Beachten Sie, dass die Quell- und Zielhandles immer auf die Oberflächen der obersten Ebene und niemals auf eine MIP-Kartenunterebene verweisen. Aufgrund eines Fehlers in der Anwendung ist es möglich, dass die Zieltextur zusätzliche MIP-Kartenebenen enthält. Beispielsweise kann eine Quelltextur von 256 x 256 fünf Ebenen enthalten, die Zieltextur 256x256 kann jedoch acht enthalten. Der Treiber wird erwartet, dass dieser Fall sicher behandelt wird, aber es wird nicht erwartet, dass die richtigen Ergebnisse erzielt werden. Aufgrund von Legacy-Anwendungskompatibilitätsproblemen verhindert Direct3D nicht, dass solche Quell-/Zieltexturpaare an den Treiber übergeben werden.

Der Treiber kann erwarten, dass die Pixelformate der Quell- und Zieltexturen identisch sind und im Allgemeinen die angegebene Blt sicher ausgeführt werden kann. Abgesehen von dem oben genannten Einzelfall sollte der Fahrer nicht erwarten, dass er mit einer Situation vorkommt, die es unmöglich macht, eine Blt durchzuführen.

Wenn der Treiber asynchrone Blts vom Systemspeicher zum Videospeicher ausführen möchte, sollte er den DirectDraw HAL-Aufruf GetSysmemBltStatusimplementieren, andernfalls können Inkonsistenzen auftreten.

Bei TexBlt ist es nicht erforderlich, dass der Treiber eine Synchronisierung durchführt, da TexBlts immer in der richtigen Reihenfolge zusammen mit Renderingbefehlen ausgegeben werden. Zuvor war es erforderlich, dass der Treiber den Fall richtig behandelt, wenn ein DirectDraw blt eine Textur geändert hat, auf die durch Renderbefehle in jedem Direct3D-Kontext verwiesen wurde. Wenn mehrere Kontexte vorhanden sind, gibt Direct3D keine TexBlts aus. Dies bedeutet, dass der Treiberschreiber den Synchronisierungscode im TexBlt-Codepfad weglassen kann (muss jedoch weiterhin für Blts synchronisiert werden).

Beispiel-

Der folgende Pseudocode zeigt, wie ein Unterrectangle für aufeinander folgende MIP-Ebenen berechnet werden soll, um zur MIP-Ebene i + 1 von MIP-Ebene i zu wechseln:

rect.left >>= 1; 
rect.top >>= 1; 
DWORD right = (rect.right + 1) >> 1; 
DWORD bottom = (rect.bottom + 1) >> 1; 
rect.right = ((right - rect.left) < 1) ? 
    (rect.left + 1) : (right); 
rect.bottom = ((bottom - rect.top ) < 1) ? 
    (rect.top + 1) : (bottom);

Anforderungen

Anforderung Wert
Header- d3dhal.h (einschließlich D3dhal.h)

Siehe auch

D3DDP2OP_TEXBLT

D3dCreateSurfaceEx

D3dDrawPrimitives2