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;

Member

dwDDDestSurface

Gibt das 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 eingeteilt werden soll, d. h. das Quellrechteck auf der Quelloberfläche (dwDDSrcSurface), aus dem geblentet werden soll.

dwFlags

Ist für das System reserviert.

Hinweise

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 Umgebungskarte sein. Der Treiber sollte ein rechteck, das von rSrc in der Quelltextur angegeben wird, an die durch pDest in der Zieltextur angegebene Position kopieren. Die Ziel- und Quelltexturen werden durch Handles identifiziert, mit denen der Treiber während der Texturerstellung benachrichtigt wurde. Wenn der Treiber Texturen verwalten kann, ist es möglich, dass das Zielhandle 0 ist. Dies gibt dem Treiber an, dass die Textur in den Videospeicher vorab geladen werden soll (oder wo die Hardware effizient Texturen abgibt). 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 einblendt. Die in MIP-Kartenunterebenen zu kopierenden Regionen können abgerufen werden, indem rSrc undpDest auf jeder Ebene durch 2 dividiert werden.

Es ist möglich, dass die Quell- und Zieltexturen eine unterschiedliche Anzahl von MIP-Kartenebenen enthalten. In diesem Fall wird erwartet, dass der Treiber die allgemeinen Ebenen einblendt. 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 ausblen. 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 256x256-Quelltextur fünf Ebenen enthalten, aber die 256x256-Zieltextur kann acht Enthalten. Es wird erwartet, dass der Treiber diesen Fall sicher behandelt, aber es wird nicht erwartet, dass er die richtigen Ergebnisse liefert. Aufgrund von Kompatibilitätsproblemen mit Legacyanwendungen verhindert Direct3D nicht, dass solche Quell-/Zieltexturpaare an den Treiber übergeben werden.

Der Treiber kann davon ausgehen, dass die Pixelformate der Quell- und Zieltexturen identisch sind, und im Allgemeinen kann der angegebene blt sicher ausgeführt werden. Mit Ausnahme des oben genannten Einzelfalls sollte der Fahrer nicht erwarten, dass er mit einer Situation angezeigt wird, die es unmöglich macht, einen Fehler auszuführen.

Wenn der Treiber asynchrone Blts vom Systemspeicher in den Videospeicher ausführen möchte, sollte er den DirectDraw HAL-Aufruf GetSysmemBltStatus implementieren, 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 musste der Treiber den Fall ordnungsgemäß behandeln, wenn ein DirectDraw-Blt eine Textur änderte, auf die durch Renderingbefehle in einem beliebigen Direct3D-Kontext verwiesen wurde. Wenn mehrere Kontexte vorhanden sind, gibt Direct3D keine TexBlts aus. Dies bedeutet, dass der Treiberschreiber den Synchronisierungscode im TexBlt-Codepfad auslassen kann (muss jedoch weiterhin für blts synchronisiert werden).

Beispiel

Der folgende Pseudocode zeigt, wie ein Subrectangle für aufeinanderfolgende MIP-Ebenen berechnet werden soll, um von der MIP-Ebene i + 1 zur 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 (include D3dhal.h)

Weitere Informationen

D3DDP2OP_TEXBLT

D3dCreateSurfaceEx

D3dDrawPrimitives2