SelfDXD von Martin Pyka
SelfDXD --- DirectXGraphic --- Direct3D Rahmeneinstellungen
Features-Abfragen mit D3DCaps8
Was ist D3DCaps8?
D3DCaps einlesen
D3DCaps verwenden

Was ist D3DCaps8?

Nicht jedes Feature, das DirectXGraphics bereithält, wird auch von jeder Grafikkarte unterstützt. Weiss eine Grafikkarte mit einer bestimmten Operation nicht umzugehen, so kann es nicht selten zum totalen Absturz des Programmes oder sogar des ganzen Systems kommen. Damit Ihr Anwendung auf möglichst vielen Rechnern einwandfrei läuft, sollten Sie deshalb bei allen wichtigen Features kontrollieren, ob diese auch von der aktuellen Grafikkarte unterstützt werden.

Für diese Aufgabe hält DirectXGraphics ein Record namens D3DCaps8 bereit. In diesem Record stehen alle wichtigen Informationen über die Features der benutzten Grafikkarte drin. Sie können dieses Record von DirectXGraphics automatisch generieren lassen und dann die entsprechenden Eigenschaften kompfortabel abfragen. D3DCaps8 steht übrigens für Direct3D-Capabilities of DirectX8.


D3DCaps8 einlesen

Es gibt zwei Arten das D3DCaps8-Record einzulesen. Beachten hierbei, das die DirectXGraphics-Features auch von der gewählten Auflösung und Farbtiefe abhängen können. Die erste Funktion ist eine Funktion des Direct3DDevice8-Interfaces.


function GetDeviceCaps(out pCaps : TD3DCaps8) : HResult;

pCaps: Ein Record vom Typ TD3DCaps8, das automatisch mit den entsprechenden Werten gefüllt wird.

Die zweite mögliche Funktion hat den gleichen Namen, gehört aber zum Direct3D8-Interface:


function GetDeviceCaps(const Adapter : Cardinal;
                       const DeviceType : TD3DDevType;
                       out   pCaps : TD3DCaps8) : HResult;

Adapter: Ordinale Zahl, die die Grafikkarte angibt, für den fall, dass Sie mehr als eine Grafikkarte benutzen. Die Standardgrafikarte wird mit der Konstante D3DADAPTER_DEFAULT benutzt.

DeviceTyp: Gibt an, ob die Features für den hardwarebeschleunigten Modus oder einen Softwaremodus gelten sollen. Verwenden Sie hierzu eine der Konstanten aus der D3DDEVTYPE-Aufzählung

pCaps: Ein Record vom Typ TD3DCaps8, das automatisch mit den entsprechenden Werten gefüllt wird.


D3DCaps8 verwenden

Wenn Sie einmal das Record mit den entsprechenden Einstellungen gefüllt haben, können Sie es zu jedem Zeitpunkt in Ihrer Anwendung einsetzen. Eine Liste aller Attribute finden Sie in der Hilfe der SDK. Wenn Sie die komplette SDK besitzen, dann können Sie sich auch in Ruhe die Features Ihrer Grafikkarte anschauen. Dafür hält die SDK ein Programm namens D3DCapsViewer bereit, dass Ihnen in einer Übersicht Auskunft über jede abrufbare Eigenschaft Ihrer Graifkkarte liefert.

Hier ein kleines Beispiel dafür, wie die D3DCaps8 eingesetzt werden können:


var
  D3DCaps8 : TD3DCaps8;
begin
  d3ddev8.GetDeviceCaps( D3DCaps8 );
  if D3DCaps8.MaxTextureBlendStages > 2 then begin
    // Alphablending mit mehreren Texturen und Licht
    // über Texturestages
  end else begin
    // Alphablending mit mehreren Texturen und Licht
    // über Multipass Blending
  end;

Da einige Grafikkarten nicht mehr als zwei Stages unterstützen, lohnt es sich hier zum Beispiel diese Abfrage einzubauen. Wenn die Grafikkarte tatsächlich nicht mehr als zwei Stages unterstützt, werden alle Textur- und Alphablendingoperationen über das Multipass Blending gemacht. Das ist dann zwar langsamer, als die Verwendung der Texturestages, aber wenigstens läuft Ihr Programm dann überhaupt.