Avatar billede zerohero Nybegynder
27. marts 2001 - 14:33 Der er 9 kommentarer og
1 løsning

Søger Hurtig Grafik i Delphi

Ok - Jeg har egentligt flere spørgsmål på hjertet:

1. Hvis man bruger eksempelvis Tbitmap og Tbitmap32 osv. benytter man så grafikkortets ram eller system ram???

2. Hvis man bruger eventuel Directx eller OpenGL, er de det eneste muligheder for at få \"lov\" til at udnytte grafikkortets ram.

3. Hvordan kan man få at vide hvor mange sytemram og hvor mange grafikram ens computer besidder? (via run-time) og hvad det er for et slags grafikkort man bruger? (via run-time)

4. Jeg har benyttet Tbitmap32 til et Desktop application (teknikken er ligesom i Diablo, hvor man bruger renderet frames i forskellige vinkler), det virker på sin vis også fint men jeg ville helst anvende directx eller lign. da jeg har på fornemmelsen at grafikken vil gå hurtigere og mere flydende.
så hvis der er nogen der ved hvordan man benytter bitmaps med directdraw vil jeg blive rigtigt glad.

5. kan man med directdraw anvende semi-transparenty ligesom i Tbitmap32?

På forhånd 1000 tak venner :-)

ZeroHero
Avatar billede nico26 Nybegynder
27. marts 2001 - 15:00 #1
her er noget kode der med directX finder oplysninger om dit grafikkort:

procedure TForm1.FormCreate(Sender: TObject);
var
  TempDirectDraw: IDirectDraw;
  HALCaps, HELCaps: TDDCaps;
begin
  DirectDrawCreate(nil, TempDirectDraw, nil);

  try
    TempDirectDraw.QueryInterface(IID_IDirectDraw4, FDirectDraw);
  finally
    TempDirectDraw := nil;
  end;

  FillChar(HALCaps, SizeOf(TDDCaps), 0);
  FillChar(HELCaps, SizeOf(TDDCaps), 0);
  HALCaps.dwSize := SizeOf(TDDCaps);
  HELCaps.dwSize := SizeOf(TDDCaps);

  FDirectDraw.GetCaps(HALCaps, HELCaps);

  SysInfo.Items.Add(\'Total Video Memory: \'+IntToStr(HALCaps.dwVidMemTotal div 1000)+\' KB\');
  SysInfo.Items.Add(\'\');

  SysInfo.Items.Add(\'Hardware Capabilities\');
  SysInfo.Items.Add(\'-------------------------------------\');

  if (HALCaps.dwCaps and DDCAPS_BLT) = DDCAPS_BLT then
    SysInfo.Items.Add(\'Hardware accelerated blits\');

  if (HALCaps.dwCaps and DDCAPS_BLTCOLORFILL) = DDCAPS_BLTCOLORFILL then
    SysInfo.Items.Add(\'Hardware accelerated color fills\');

  if (HALCaps.dwCaps and DDCAPS_BLTQUEUE) = DDCAPS_BLTQUEUE then
    SysInfo.Items.Add(\'Asynchronous hardware blits\');

  if (HALCaps.dwCaps and DDCAPS_BLTSTRETCH) = DDCAPS_BLTSTRETCH then
    SysInfo.Items.Add(\'Hardware stretch blits\');

  if (HALCaps.dwCaps2 and DDCAPS2_CERTIFIED ) = DDCAPS2_CERTIFIED  then
    SysInfo.Items.Add(\'Microsoft certified driver\');

  if (HALCaps.dwCaps2 and DDCAPS2_NONLOCALVIDMEM ) = DDCAPS2_NONLOCALVIDMEM  then
    SysInfo.Items.Add(\'AGP video card\');

  if (HALCaps.dwCKeyCaps and DDCKEYCAPS_SRCBLT) = DDCKEYCAPS_SRCBLT  then
    SysInfo.Items.Add(\'Hardware accelerated source color key blits\');

  SysInfo.Items.Add(\'\');
  SysInfo.Items.Add(\'\');

  {emulated caps}
  SysInfo.Items.Add(\'Emulated Capabilities\');
  SysInfo.Items.Add(\'-------------------------------------\');

  if (HELCaps.dwCaps and DDCAPS_BLT) = DDCAPS_BLT then
    SysInfo.Items.Add(\'Emulated blits\');

  if (HELCaps.dwCaps and DDCAPS_BLTCOLORFILL) = DDCAPS_BLTCOLORFILL then
    SysInfo.Items.Add(\'Emulated color fills\');

  if (HELCaps.dwCaps and DDCAPS_BLTQUEUE) = DDCAPS_BLTQUEUE then
    SysInfo.Items.Add(\'Emulated asynchronous blits\');

  if (HELCaps.dwCaps and DDCAPS_BLTSTRETCH) = DDCAPS_BLTSTRETCH then
    SysInfo.Items.Add(\'Emulated stretch blits\');

  if (HELCaps.dwCaps2 and DDCAPS2_CERTIFIED ) = DDCAPS2_CERTIFIED  then
    SysInfo.Items.Add(\'Microsoft certified driver\');

  if (HELCaps.dwCaps2 and DDCAPS2_NONLOCALVIDMEM ) = DDCAPS2_NONLOCALVIDMEM  then
    SysInfo.Items.Add(\'Emulated AGP video card\');

  if (HELCaps.dwCKeyCaps and DDCKEYCAPS_SRCBLT) = DDCKEYCAPS_SRCBLT  then
    SysInfo.Items.Add(\'Emulated source color key blits\');
end;



Og de forskellige skærmopløsninger:

function EnumModesCallback(const lpDDSurfaceDesc: TDDSurfaceDesc2;
                          lpContext: Pointer): HResult; stdcall;
begin
  TStringList(lpContext).Add(IntToStr(lpDDSurfaceDesc.dwWidth)+\' X \'+
                        IntToStr(lpDDSurfaceDesc.dwHeight)+\', \'+
                        IntToStr(lpDDSurfaceDesc.ddpfPixelFormat.dwRGBBitCount)+
                        \' bits/pixel\');

  Result := DDENUMRET_OK;
end;


procedure TForm1.FormCreate(Sender: TObject);
var
  TempDirectDraw: IDirectDraw;
begin
  DirectDrawCreate(nil, TempDirectDraw, nil);

  try
    TempDirectDraw.QueryInterface(IID_IDirectDraw4, FDirectDraw);
  finally
    TempDirectDraw := nil;
  end;

  FDirectDraw.EnumDisplayModes(0,nil, lbxDisplayModes.Items, EnumModesCallback);
end;


DirectDraw har noget der hedder color keying, hvor du kan sætte en bestemt farve til at være transparent.
Avatar billede nico26 Nybegynder
27. marts 2001 - 15:32 #2
du kan downloade DelphiX og tutorials her:
http://delphi.about.com/compute/delphi/cs/delphixdirectx/index.htm
Avatar billede martinlind Nybegynder
27. marts 2001 - 16:42 #3
Avatar billede nico26 Nybegynder
27. marts 2001 - 17:16 #4
her er masse links til grafisk programmering med delphi og DirectX/OpenGL:
http://www.inner-smile.com/delphit.htm#graph
Avatar billede zerohero Nybegynder
27. marts 2001 - 21:16 #5
nico22 >> jeg er netop ifærd med at afprøve dit eksempel... men det virker ikke rigtigt. Da Delphi 4 spørger om Defination af FDirectDraw og jeg har søgt efter FDirectDraw i alle DirectX componenterne men forgæves. Så måske du kunne give mig et hint om hvad FDirectDraw er.
Avatar billede nico26 Nybegynder
27. marts 2001 - 22:06 #6
det er en variabel du skal erklære af typen IDirectDraw4:

var
  FDirectDraw: IDirectDraw4;
Avatar billede zerohero Nybegynder
28. marts 2001 - 12:24 #7
nico22>> OK - nu brokker min Delphi sig, skriver dette:

Incompatible types: \'TDDCaps_DX6\' and \'PDDCaps\'

Hvilket jeg ikke ved hvad betyder.
Avatar billede nico26 Nybegynder
28. marts 2001 - 13:54 #8
det er fordi din header er en anden end min. Prøv det her:

FDirectDraw.GetCaps(@HALCaps, @HELCaps);
Avatar billede zerohero Nybegynder
06. april 2001 - 10:17 #9
nico22>> Ok - Det virker nu... men jeg kan desværre ikke bruge koden til noget, da den hverken henter navn eller ram fra mit grafik kort.

Da jeg ikke har fået et mine spørgsmål besvaret lukker jeg dette spørgsmål.
Avatar billede zerohero Nybegynder
06. april 2001 - 10:18 #10
Der er desværre ingen der får point i denne omgang.

ZeroHero
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester