Bevor wir anfangen, in die tiefen des Source Codes zu versinken. Zuerst ein paar Fachbegrifferklärungen. Somit lässt sich der nachfolgenden Code viel einfacher verstehen.
In Direct3D werden Grafikkarten als Adapter bezeichnet. Jeder Adapter bietet verschiedene Grafikauflösungen (z.B. 320x200, 640x480, 800x600) mit jeweils verschieden Farbtiefen. (z.B. 8 Bit, 16 Bit, 24 oder gar 32 Bit). Die Auflösungen werden als Modi (Bildschirm-Modus) bezeichnet. Jede Grafikkarte (Adapter) verfügt über mehrer 3Ddevices. So kann ein Adapter über ein Standard 2D Renderer und einen 3D Rasterizer verfügen. Wird hier einfach die Standard Einstellung übernommen so wird unter Umständen die schlechtere bzw. langsamere Hardware angesprochen anstatt die schnelle 3D Beschleunigerkarte. Um dies zu verhindern werden wir alle möglichen Adapter, Modi abfragen und die für uns sinnvollste Auswahl treffen.
Damit wir von Direct3D Informationen erhalten können, müssen wir zuerst das Direct3D Hauptobjekt erstellen.
g_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
g_pD3D ist eine Globale Variable die wir in die Header - Datei mainInit.h wiederfinden.
Hier findet man auch die Variablen der Strukturen für die Grafikarten und Modi.
Die Struktur der Grafikarten D3DadapterInfo enthält die 3Ddevices, diese wiederum die verschiedenen Modi.
struct D3DAdapterInfo
{
// Grafikkarten Daten
D3DADAPTER_IDENTIFIER8 d3dAdapterIdentifier;
// Den derzeitigen Desktop Video Modus
D3DDISPLAYMODE d3ddmDesktop; /
// 3DDevices für diese Grafikkarte
DWORD dwNumDevices;
D3DDeviceInfo devices[5];
// Gewähltes Device
DWORD dwCurrentDevice;
};
Die Struktur des DeviceInfo enthält Informationen über die Kompatibilität, Typ und über alle Modi (Auflösungen). Siehe Struktur.
struct D3DDeviceInfo
{
// Device Beschreibung entweder
// HAL für Hardwareunterstütze Hardware
// REF für Reference Treiber meist Software
// oder SW für Plugable Software
D3DDEVTYPE DeviceType;
D3DCAPS8 d3dCaps; // Enthält alle Kompatiblitäts Daten
Const Tchar* strDesc; // Name des Device
BOOL bCanDoWindowed; // Window Mode möglich
// Modi des Device
DWORD dwNumModes;
D3DModeInfo modes[150];
// Der Zeit benutzer Modus
DWORD dwCurrentMode;
BOOL bWindowed;
D3DMULTISAMPLE_TYPE MultiSampleType;
};