![]() ![]() ![]() |
|
![]() |
|
![]() |
![]() ![]() ![]() |
Direct3D8 ist das Hauptinterface Ihrer Direct3D-Anwendung. Mit diesem Interface selbst kann man grafisch gesehen eigentlich noch gar nichts machen, doch es ist trotzdem notwendig, weil Sie über dieses Interface Grafikkarten- und Bildschirmparameter abfragen können. Das ist zum Beispiel wichtig, um die Bildschirmeinstellungen Ihres Programms einstellen zu können. Direct3D8 ist das erste Objekt, dass ihre Anwendung erstellt, und das letzte, dass ihre Anwendung freigibt.
Um Direct3D8 verwenden zu können ist es notwendig, dass Sie in den uses-Bereich Ihres Programms die Datei DirectXGraphics angeben. Wenn Sie eine normale Anwendung unter Delphi erstellen, schreiben Sie DirectXGraphics zu den anderen Units hinzu:
unit Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DirectXGraphics; |
Um Direct3D8 und damit DirectXGraphics nutzen zu können, müssen Sie eine Variable definieren, der Sie das Direct3D8-Interface zuweisen. Das Initialisieren erfolgt über einen einfachen Befehl. Nach dem Beispiel folgt die Erklärung.
var d3d8: IDirect3D8; procedure d3d_initialisieren; begin d3d8:= Direct3DCreate8( D3D_SDK_VERSION ); if d3d8 = nil then exit; end; |
Mit der Funktion Direct3DCreate8 weisen Sie einer Variable das Direct3D8-Interface zu. D3D_SDK_VERSION ist dabei eine Konstante die sicherstellt, dass Sie immer die richtige DirectX-Version benutzen. Das ist zum Beispiel wichtig, wenn Sie eine neuere DirectX-Version installieren und auch auf die neuen Befehle zugreifen wollen. In DirectX 8.0 steht diese Konstante für die Zahl 120. In der nächsten Version kann das aber anders sein. Wenn Sie immer die aktuellste DirectX-Version verwenden wollen, benutzen Sie immer die Konstante D3D_SDK_VESION. Wenn Sie immer nur DirectX 8.0 verwenden wollen, können Sie auch einfach nur 120 eingeben.
Gewöhnen Sie sich bei solchen Initialisierungen auch gleich an, zu kontrollieren, ob diese Initiallisierung auch wirklich erfolgte. Wenn Ihr Programm auf möglichst vielen Rechnern laufen sollen, sind diese Abfragen notwendig, um schnell den Grund dafür zu finden, warum Ihr Programm nicht funktioniert.
Sie haben nun Direct3D8 initialisiert, haben grafisch gesehen aber noch ungefähr gar nichts davon. Denn das Direct3D8-Interface dient nur dazu, die Verbindung zu den Hardwarekomponenten Ihres PC's zu gewährleisten (also Grafikkarte, Monitor), um auf diese zugreifen zu können.
Da das Direct3D8-Interfacae Speicher belegt, sollten Sie nie vergessen, diesen auch wieder freizugeben, wenn das Programm beendet wird. Wider erwarten macht das Delphi nämlich nicht automatisch. So könnte eine Lösung aussehen:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if d3d8 <> NIL then d3d8:= NIL; end; |
Da d3d8 ja ein Interface und keine Klasse ist, gibt es auch nicht die .free-Prozedur. Ein einfaches NIL-setzen ist hier die Lösung.