procedure TForm1.FormCreate(Sender: TObject);
…
begin
FD3D:=nil;
FD3D:=Direct3DCreate8(D3D_SDK_VERSION);
if Assigned(FD3D) then begin
A GetDeviceCaps függvény első paraméterében a kérdéses monitorvezérlő kártya sorszámát kell megadnunk. Ha a második paraméterben a D3DDEVTYPE_HAL konstanst használjuk, akkor ezzel a hardver által támogatott lehetőségeket kérdezzük le. Ha itt a D3DDEVTYPE_REF konstanst adjuk meg, akkor a Direct3D szoftveresen megvalósított képességeiről szerezhetünk információt. Harmadik paraméterben egy TD3DCaps8 struktúrát kell megadnunk, melyben a lekérdezés eredménye kap majd helyet. Ha a visszatérési értéke a függvénynek D3D_OK, akkor a lekérdezés eredményes volt.
if FD3D.GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, cap)=D3D_OK then begin
A TD3DCaps8 számos mezőt tartalmaz. A következőkben nincs más dolgunk, mint ezen értékek megjelenítése egy TListBox-ban.
ListBox1.Items.Add('DeviceType: '+IntToStr(cap.DeviceType));
…
Vannak olyan értékek is ebben a struktúrában, melyek DWORD típusúak és minden egyes bitjük más és más képesség meglétét jelentik. Ilyen esetben nem elegendő az adott érték ismerete, nem árt ha ezeket külön bitenként figyelembe vesszük. Ilyen mező például a LineCaps is, mely csak egy a sok ilyen típusú mező közül. Ennek részletes megjelenítéséhez készítettünk egy LineCaps nevű eljárást, melynek mintájára a többi, hasonló típusú mezőhöz is könnyedén megvalósíthatjuk a megjelenítő funkciót szükség szerint.
ListBox1.Items.Add('LineCaps: '+IntToStr(cap.LineCaps));
LineCaps(cap.LineCaps);
…
A LineCaps függvénynek paraméterként adjuk át az aktuális értéket.
procedure TForm1.LineCaps(value: LongWord);
const
Létrehozunk egy tömböt, melyben felsoroljuk az egyes bitek elnevezését.
names: array[0..4] of string=(
'D3DLINECAPS_TEXTURE',
'D3DLINECAPS_ZTEST',
'D3DLINECAPS_BLEND',
'D3DLINECAPS_ALPHACMP',
'D3DLINECAPS_FOG'
);
var
i: integer;
s: string;
begin
Majd egy ciklus segítségével végignézzük az értelmezhető biteket és megjelenítjük a ListBox-ban, hogy az adott bit beállított-e vagy sem, vagyis hogy az adott hardver eszköz rendelkezik-e az adott képességgel, illetve nem.
for i:=0 to 4 do begin
ListBox1.Items.Add(#9'- '+names[i]+': '+yesno[value mod 2 = 1]);
value:=value div 2;
end;
end;