Breite im Vergleich zu Pitch (Direct3D 9)

Obwohl die Begriffe Breite und Tonhöhe oft informell verwendet werden, haben sie sehr wichtige und deutlich unterschiedliche Bedeutungen. Daher sollten Sie die Bedeutungen für die einzelnen Werte verstehen und verstehen, wie Sie die Werte interpretieren, die Direct3D verwendet, um sie zu beschreiben.

Direct3D verwendet die D3DSURFACE_DESC-Struktur , um Informationen zu übertragen, die eine Oberfläche beschreiben. Diese Struktur ist unter anderem so definiert, dass sie Informationen über die Abmessungen einer Oberfläche sowie die Darstellung dieser Dimensionen im Speicher enthält. Die -Struktur verwendet die Elemente Height und Width, um die logischen Dimensionen der Oberfläche zu beschreiben. Beide Member werden in Pixeln gemessen. Daher sind die Werte für Höhe und Breite für eine Oberfläche mit einer Größe von 640 x 480 identisch, unabhängig davon, ob es sich um eine 8-Bit-Oberfläche oder eine 24-Bit-RGB-Oberfläche handelt.

Wenn Sie eine Oberfläche mit der IDirect3DSurface9::LockRect-Methode sperren, füllt die Methode eine D3DLOCKED_RECT Struktur aus, die den Pitch der Oberfläche und einen Zeiger auf die gesperrten Bits enthält. Der Wert im Pitch-Element beschreibt die Speicherhöhe der Oberfläche, auch als Schritt bezeichnet. Pitch ist der Abstand in Bytes zwischen zwei Speicheradressen, die den Anfang einer Bitmapzeile und den Anfang der nächsten Bitmapzeile darstellen. Da die Tonhöhe in Bytes und nicht in Pixeln gemessen wird, weist eine Oberfläche mit 640 x 480 x 8 einen ganz anderen Tonhöhenwert auf als eine Oberfläche mit den gleichen Abmessungen, aber einem anderen Pixelformat. Darüber hinaus gibt der Tonhöhenwert manchmal Bytes an, die Direct3D als Cache reserviert hat, sodass es nicht sicher ist, anzunehmen, dass die Tonhöhe nur die Breite multipliziert mit der Anzahl von Bytes pro Pixel ist. Visualisieren Sie stattdessen den Unterschied zwischen Breite und Tonhöhe, wie im folgenden Diagramm dargestellt.

Diagramm der Neigung und Breite für denselben Frontpuffer, Backpuffer und Cache

In diesem Diagramm sind der Frontpuffer und der Backpuffer jeweils 640 x 480x8 und der Cache 384x480x8.

Achten Sie beim direkten Zugriff auf Oberflächen darauf, innerhalb des Für die Abmessungen der Oberfläche zugeordneten Arbeitsspeichers zu bleiben und sich von jedem für den Cache reservierten Speicher fern zu halten. Wenn Sie außerdem nur einen Teil einer Oberfläche sperren, müssen Sie innerhalb des Rechtecks bleiben, das Sie beim Sperren der Oberfläche angeben. Wenn Sie diese Richtlinien nicht befolgen, führt dies zu unvorhersehbaren Ergebnissen. Verwenden Sie beim direkten Rendern im Surface-Speicher immer die Von der IDirect3DSurface9::LockRect-Methode zurückgegebene Tonhöhe. Gehen Sie nicht davon aus, dass eine Tonhöhe ausschließlich auf dem Anzeigemodus basiert. Wenn Ihre Anwendung auf einigen Grafikkarten funktioniert, andere jedoch nicht richtig aussehen, kann dies die Ursache des Problems sein.

Weitere Informationen finden Sie unter Direktes Zugreifen auf Surface-Speicher (Direct3D 9).

Direct3D-Oberflächen