Im SDK Beispiel von Microsoft wird eine DeviceListe erstellt. Indem alle möglichen
Einstellungen (Grafikkarte, Auflösung, Hardware unterstützung usw.) drin stehen.
Im SDK gibt es folgende Routine die ich auch so übernommen habe.
HRESULT BuildDeviceList()
Den Source Code brauche ich hier ja nicht bereitstellen. Ihr habt ihn ja im SDK.
Um mit dieser Liste besser umgehen zu können habe ich einige Hilfsroutinen geschrieben.
Auf dem ersten Blick mag das alles ein wenig übertrieben sein, doch später kann man damit
ein schönes Auswahl Dialog Fenster erstellen.
//
// Wieviel Adapter gibt es ?
//
int DeviceList_getAdapterCount() {
{
return m_dwNumAdapters;
}
//
// Welchen Namen hat der Adpater ?
// !! Für Name musss vorher Speicher reseviert wurden sein. ! !
DeviceList_getAdapterName(int index, char *Name)
{
D3DAdapterInfo* pAdapterInfo;
pAdapterInfo = &m_Adapters[index];
strcpy(Name,pAdapterInfo->d3dAdapterIdentifier.Description);
return 0;
}
//
// Anzahl der Device's Meisst Hal oder Ref also 2
//
int DeviceList_getAdapterDeviceCount(int index)
{
D3DAdapterInfo* pAdapterInfo;
pAdapterInfo = &m_Adapters[index];
return pAdapterInfo->dwNumDevices;
}
//
// Name des Devices
// !! Für Name musss vorher Speicher reseviert wurden sein. ! !
int DeviceList_getAdapterDeviceName(int index,int DeviceIndex,char *Name)
{
D3DAdapterInfo* pAdapterInfo;
D3DDeviceInfo* pDeviceInfo;
pAdapterInfo = &m_Adapters[index];
pDeviceInfo = &pAdapterInfo->devices[DeviceIndex];
strcpy(Name,pDeviceInfo->strDesc);
return pAdapterInfo->dwNumDevices;
}
//
// Anzahl der Bildschirm Modi des Devices
//
int DeviceList_getModeCount(int AdapterIndex, int DeviceIndex)
{
D3DAdapterInfo* pAdapterInfo;
D3DDeviceInfo* pDeviceInfo;
pAdapterInfo = &m_Adapters[AdapterIndex];
pDeviceInfo = &pAdapterInfo->devices[DeviceIndex];
return pDeviceInfo->dwNumModes;
}
//
// Auflösung einholen Breite Höhe farbtiefe usw.
//
int DeviceList_getMode(int AdapterIndex,int deviceIndex,int modeIndex,
int &w, int &h, int &window, int &bit)
{
D3DAdapterInfo* pAdapterInfo;
D3DDeviceInfo* pDeviceInfo;
D3DModeInfo* pModeInfo;
D3DFORMAT* pDepthStencilFormat;
pAdapterInfo = &m_Adapters[AdapterIndex];
pDeviceInfo = &pAdapterInfo->devices[deviceIndex];
pModeInfo = &pDeviceInfo->modes[modeIndex];
w = pModeInfo->Width;
h = pModeInfo->Height;
pDepthStencilFormat = &pModeInfo->DepthStencilFormat;
bit = pModeInfo->Format==D3DFMT_X8R8G8B8?32:16;
return m_dwAdapter;
}
Mit dieser Liste und den Routinen kann man dann ganz einfach ein Dialog erstellen.
(Pseudo Code)
for i = 0 to DeviceList_getAdapterCount-1 do begin
DeviceList_getAdapterName(i,adapterName);
// Listbox Karten Füllen
setGraphModus.Items.append(adapterName);
for deviceIndex = 0 to DeviceList_getAdapterDeviceCount(i)-1 do begin
for modeIndex = 0 to DeviceList_getModeCount(i,deviceIndex)-1 do begin
mode := DeviceList_getMode(i,deviceIndex,modeIndex,w,h,wind,bit);
DeviceList_getAdapterDeviceName(i,deviceIndex,deviceName);
str := Format('%s w:%d b:%d bit:%d Device:%s',[adapterName,w,h,bit,deviceName]);
// Listbox mit Modi füllen
adapters.Items.Append(str);
end;
end;
end;