HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Monitor kártya képességeinek lekérdezése


DirectX 3. rész

Példaprogram letöltése

10234 bájt


Támogatja-e a monitor kártya az árnyékképzést, vagy a köd effekt létrehozását? Mekkora a textúra buffer mérete?
Ebben a cikkben ehhez hasonló, több mint száz kérdésre keressük a választ, melyekkel nem árt tisztában lennie alkalmazásunknak, amikor szeretnénk kihasználni a monitorkártya hardveres gyorsítását a grafikáink létrehozásakor.

A sok-sok kérdésre egyetlen függvényen keresztül kaphatunk választ. Ez az IDirect3D8 interfész GetDeviceCaps függvénye lesz. Használata előtt azonban a már szokásosnak mondható módon létre kell hoznunk egy kapcsolatot az IDirect3D8 interfésszel a Direct3DCreate8 függvény meghívásával.
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;



Cikksorozat

#IDKategóriaCikk címeSorozat
3916WindowsA javascript nyelv bemutatása1. rész
3946WindowsJavascript változók és operátorok2. rész
3975WindowsKódvezérlés JScript-ben3. rész
4004WindowsFüggvények és objektumok4. rész
4036WindowsFejlett funkciók a JavaScript nyelvben5. rész
4066WindowsFejlett funkciók a JavaScript nyelvben - folytatás6. rész
4116WindowsReguláris kifejezések7. rész
4145WindowsReguláris kifejezések - folytatás8. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 669. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |