Liste des Texturformats

Direct 8.0 führt einen neuen Mechanismus zum Beschreiben von Pixelformaten ein. In früheren Versionen von DirectDraw- und Direct3D-Pixelformaten wurde durch eine Datenstruktur (DDPIXELFORMAT) beschrieben, die Informationen zur Anzahl der Bits pro Farbkanal und Bitmasken für jeden Farbkanal (zusammen mit Flags und Größenfeld) enthielt. Pixelformate in DirectX 8.0 sind einfache DWORDs, die ein bestimmtes Pixelformat identifizieren und mit FOURCCs kompatibel sind (Direct3D-Pixelformate sind einfach FOURCCs mit allen außer den geringsten Bytes null).

Die DDPIXELFORMAT-Datenstruktur wird nicht mehr über Schnittstellen auf API-Ebene verfügbar gemacht. Es wird jedoch weiterhin auf DDI-Ebene verwendet. Der Treiber meldet seine unterstützten Texturformate über ein Texturformatarray, das aus Oberflächenbeschreibungen mit ihren eingebetteten DDPIXELFORMAT-Datenstrukturen besteht. Die eingebetteten Pixelformatstrukturen können jetzt jedoch verwendet werden, um neue Pixelformate zu melden. Um ein neues Pixelformat mit der DDPIXELFORMAT-Datenstruktur anzugeben, legen Sie das DwFlags-Feld der Struktur auf den Wert DDPF_D3DFORMAT fest, und speichern Sie den neuen Pixelformatbezeichner im Feld dwFourCC .

Darüber hinaus wurden bestimmte neue Felder zu DDPIXELFORMAT hinzugefügt (die neuen Felder wurden als Member von Unionen mit vorhandenen Feldern hinzugefügt, sodass die Größe der Datenstruktur identisch ist). Zu diesen Feldern gehören dwOperations, dwPrivateFormatBitCount und wFlipMSTypes und wBltMSTypes.

Ein DirectX 8.0 DDI-kompatibler Treiber sollte weiterhin Oberflächenformate im DX7-Stil über die Standardmechanismen melden, d. h. die Texturformatliste, die in der globalen Treiberdatenstruktur (D3DHAL_GLOBALDRIVERDATA) gemeldet wird, und die Z/Schablonenliste, die als Reaktion auf eine GUID_ZPixelFormats von DdGetDriverInfo gemeldet wurde. Der Treiber sollte jedoch auch alle unterstützten Oberflächenformate über den unten beschriebenen neuen DirectX 8.0 DDI-Mechanismus melden.

DirectX 8.0 DDI-Formatoberflächenformate werden mithilfe von GetDriverInfo2 gemeldet. Zwei GetDriverInfo2-Abfragetypen werden von der Runtime verwendet, um Oberflächenformate vom Treiber abzufragen. D3DGDI2_TYPE_GETFORMATCOUNT wird verwendet, um die Anzahl der vom Treiber unterstützten DirectX 8.0-Formatoberflächenformate anzufordern. D3DGDI2_TYPE_GETFORMAT wird verwendet, um ein bestimmtes Oberflächenformat vom Treiber abzufragen.

Um die D3DGDI2_TYPE_GETFORMATCOUNT zu verarbeiten, muss der Treiber die Anzahl der unterstützten DirectX 8.0 DDI-Formatoberflächenformate im dwFormatCount-Feld des DD_GETFORMATCOUNTDATA speichern.

Wenn die Runtime die Anzahl der unterstützten Formate vom Treiber erhalten hat, fragt sie nach jedem Oberflächenformat wiederum mit GetDriverInfo2-Abfragen vom Typ D3DGDI2_TYPE_GETFORMAT ab. Die Datenstruktur, auf die das Feld lpvData der DD_GETDRIVERINFODATA Datenstruktur verweist, ist in diesem Fall DD_GETFORMATDATA.

Die DirectX 8.0-Runtime scannt die Vom Treiber gemeldete Texturformatliste und untersucht die dwFlags-Felder jedes Pixelformats. Wenn für eines der Texturformate dwFlags auf DDPF_D3DFORMAT festgelegt ist, identifiziert die Runtime diese Texturformatliste als DX8-Format und filtert alle Texturformate, deren Pixelformat nicht als DDPF_D3DFORMAT gekennzeichnet ist. Darüber hinaus filtert eine DX7-Runtime jedes Texturformat, das DDPF_D3DFORMAT festgelegt hat. Daher kann ein Treiber, der die DX8 DDI unterstützt, eine Texturformatliste zurückgeben, die zwei Einträge für jedes unterstützte Format enthält, einen im alten Format und einen im neuen Format. DX8-Runtimes verwenden die formate, die im neuen Stil angegeben sind, und DX7-Runtimes verwenden die im alten Format angegebenen Formate.

Alle unterstützten Oberflächenformate, z. B. Texturen, Tiefen- oder Schablonenpuffer oder Renderziele, sollten über den GetDriverInfo2-Mechanismus gemeldet werden. Die Runtime ignoriert die Textur- und Z/Schablonenformate, die über Legacymechanismen (D3DHAL_GLOBALDRIVERDATA und GUID_ZPixelFormats) zurückgegeben werden. Es wird nicht versucht, diese Formate DX8-Formaten für DirectX 8.0-Treiber zuzuordnen. Legacyformate werden jedoch dem neuen Stil für DirectX 7.0- oder frühere Treiber zugeordnet. Daher muss ein Treiber alle unterstützten Oberflächenformate über DirectX 8.0 DDI melden. Darüber hinaus ist es wichtig, dass der Treiber weiterhin DirectX 7.0-Formatvorlagen und Z/Schablonenformate über den legacy-Mechanismus meldet, da Legacy-Runtimes keine neuen Formatvorlagenformate für Oberflächen im Stil von DirectX 7.0 und Z/Stencil zuordnen.