![]() ![]() ![]() |
|
![]() |
|
![]() |
![]() ![]() ![]() |
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.
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.
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.