#1 23.12.2012 14:34:02

Gewuerzgurke
Member
Registriert: 15.09.2008
Beiträge: 47
Web-Seite

Inkompatibel mit Windows XP?

Hallo,
ich bekomme im Moment keine DX-Programme unter XP zum laufen, weder meine eigenen, noch die verschiedenen Mitgliederprojekte hier aus dem Forum oder die Beispiele von Martin Pykas Buch.

Habe es auf verschiedenen Computern versucht, neuste Version von DirectX (9), Grafiktreiber aktualisiert usw.

Musste man irgendwas beachten, damit es auf XP geht?

Offline

 

#2 23.12.2012 15:15:06

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Inkompatibel mit Windows XP?

Die Programme von Martin Pyka brauchten alle eine spezielle d3dx9.dll damit sie funktionierten. Die ist etwas anders zu den normalen DX9-DLLs die man mit der neuestern DX-Version bekommt. Hab sie noch auf unserem Webspace gefunden http://pixelsummoners.de/downloads/d3dx9.zip, hoffe damit geht es dann. (Das hätte dann aber nix mit XP zu tun)


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#3 23.12.2012 15:25:31

Gewuerzgurke
Member
Registriert: 15.09.2008
Beiträge: 47
Web-Seite

Re: Inkompatibel mit Windows XP?

Ne, daran liegt es nicht. Die d3dx9.dll gibt es doch auch hier im Forum, oder? Der Link geht nämlich nicht...

Ich habe ganz vergessen, meinen Code zu posten:

Code:

 // Create DirectX
 D3D9 := Direct3DCreate9(D3D_SDK_VERSION);
 if (D3D9 = nil) then begin Panel1.Caption := 'Fehler beim erstellen von Direct3D'; exit; end;
 Fillchar(d3dpp, sizeof(d3dpp), 0);
 with (d3dpp) do begin
  SwapEffect := D3DSWAPEFFECT_DISCARD;
  Windowed := true;
  D3D9.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,d3ddm);
  BackBufferFormat := d3ddm.Format;
  BackBufferWidth  := FormDX.width;
  BackBufferHeight := FormDX.height;
  EnableAutoDepthStencil := true;
  AutoDepthStencilFormat := D3DFMT_D16;
 end;
 i := 0;
 repeat begin
  case (i) of
   0 : begin
    vertexprocessing := D3DCREATE_HARDWARE_VERTEXPROCESSING;
    dtype := D3DDEVTYPE_HAL;
   end;
   1 : begin
    vertexprocessing := D3DCREATE_HARDWARE_VERTEXPROCESSING;
    dtype := D3DDEVTYPE_REF;
   end;
   2 : begin
    vertexprocessing := D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    dtype := D3DDEVTYPE_HAL;
   end;
   3 : begin
    vertexprocessing := D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    dtype := D3DDEVTYPE_REF;
   end;
  end;
  D3D9.GetDeviceCaps(D3DADAPTER_DEFAULT,dtype,D3DCaps9);
  e := D3D9.CreateDevice(D3DADAPTER_DEFAULT,dtype,FormDX.Handle,vertexprocessing or $10000000,@d3dpp,D3DDev9);
  inc(i);
 end until (e = d3d_ok) or (i >= 4);
 if (e <> d3d_ok) then begin Panel1.Caption := 'Fehler beim erstellen von Direct3DDevice. Fehlercode 0x' + IntToHex(e,8); exit; end;

Um auf Nummer sicher zu gehen, probiere ich alle Möglichkeiten durch, aber es läuft bis zum Ende durch und es wird "Fehler beim erstellen von Direct3DDevive. Fehlercode 0x887608C" ausgegeben.

Wie gesagt: Auch die Projekte hier im Forum gehen nicht yikes
Aktuell rede ich von folgendem Programm: http://www.mitjastachowiak.de/?/Projects/Interferenz - Könnt ihr ja auch mal testen.

Beitrag geändert von Gewuerzgurke (23.12.2012 15:26:16)

Offline

 

#4 26.12.2012 20:03:11

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Re: Inkompatibel mit Windows XP?

Habe dein Programm ausprobiert und bei mir geht es ohne Probleme. Hast du XP 32Bit oder 64Bit Version?
Ansonsten geht der Link von Gnietschow, da is nur nen "," (Komma) zuviel. Hier der korrigierte http://pixelsummoners.de/downloads/d3dx9.zip.

Versuch mal die DLL zur Exe zu kopieren, vielleicht geht es dann.

Grüße DfoG

Beitrag geändert von DragonFlyOfGold (26.12.2012 20:03:26)

Offline

 

#5 27.12.2012 13:38:53

Gewuerzgurke
Member
Registriert: 15.09.2008
Beiträge: 47
Web-Seite

Re: Inkompatibel mit Windows XP?

Hallo,
schön, dass es bei dir geht. Also ist es doch kein prinzipielles Problem. Ich habe auf meinem Testcomputer noch das DirectX Runtime for August 2008 (http://www.microsoft.com/en-us/download … px?id=9155) installiert. Was ich vorher hatte, war wohl doch nicht richtig. Danach starteten schonmal die Beispiele und die Projekte aud dem Forum. Mein Programm wollte immernoch nicht.

Habe dann die InitDGFX-Funktion aus dem Buch genommen und solange umgeschrieben, bis ich wieder (fast) meinen Code hatte:

Code:

var
  dtype            : TD3DDevType;
  D3DCaps9         : TD3DCaps9;
  vertexprocessing : Integer;
  d3ddm            : TD3DDisplayMode;
  b : Boolean;
  i : integer;
  p : PBuffer;
  e : Cardinal;


 // Create DirectX
 d3d9 := Direct3DCreate9(D3D_SDK_VERSION);
 if (d3d9 = nil) then  begin Panel1.Caption := 'Fehler beim erstellen von Direct3D.'; exit; end;
 Fillchar(d3dpp,sizeof(d3dpp),0);
 with (d3dpp) do begin
  SwapEffect := D3DSWAPEFFECT_DISCARD;
  Windowed := true;
  e := D3D9.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,d3ddm);
  if (failed(e)) then begin Panel1.Caption := 'Fehler beim abfragen das Display Modes. Fehlercode 0x' + IntToHex(e,8); exit; end;
  BackBufferFormat := d3ddm.Format;
  BackBufferWidth  := FormDX.width;
  BackBufferHeight := FormDX.height;
  EnableAutoDepthStencil := true;
  AutoDepthStencilFormat := D3DFMT_D16;
 end;
 i := 0;
 repeat begin
  case (i) of
   0 : dtype := D3DDEVTYPE_HAL;
   1 : dtype := D3DDEVTYPE_REF;
   2 : dtype := D3DDEVTYPE_NULLREF;
  end;
  e := d3d9.GetDeviceCaps(D3DADAPTER_DEFAULT,dtype,D3DCaps9);
  if (failed(e)) then begin Panel1.Caption := 'Fehler beim abfragen von Direct3D Device Caps. Fehlercode 0x' + IntToHex(e,8); exit; end;
  b := D3DCaps9.DevCaps and D3DDEVCAPS_HWTRANSFORMANDLIGHT <> 0;
  if (b) then vertexprocessing := D3DCREATE_HARDWARE_VERTEXPROCESSING
  else vertexprocessing := D3DCREATE_SOFTWARE_VERTEXPROCESSING;
  e := d3d9.CreateDevice(D3DADAPTER_DEFAULT,dtype,FormDX.Handle,vertexprocessing,@d3dpp,d3ddev9);
  inc(i);
 end until (not failed(e)) or (i > 2);
 if (failed(e)) then begin Panel1.Caption := 'Fehler beim erstellen von Direct3DDevice. Fehlercode 0x' + IntToHex(e,8); exit; end;

Jetzt geht's. Auch wenn ich nicht verstehe, was an dem neuen Code so anders ist - D3DDEVTYPE_NULLREF wird nicht verwendet, das habe ich getestet, und bei meinem vorherigen Code nur das <> d3dok mit failed zu ersetzent hat es auch nicht gebracht...

Aber es geht big_smile

Vielen Dank.

Beitrag geändert von Gewuerzgurke (27.12.2012 13:39:29)

Offline

 

#6 27.12.2012 13:49:15

Gewuerzgurke
Member
Registriert: 15.09.2008
Beiträge: 47
Web-Seite

Re: Inkompatibel mit Windows XP?

Ahaaa, es war das  or $10000000. Das sollte eigentlich nur signalisieren, dass der Bildschirmschoner starten darf (http://msdn.microsoft.com/en-us/library … s.85).aspx). Habe nochmal nachgelesen - das geht nur  in Direct3D 9Ex, was auch immer das heißen soll...

Offline

 

#7 27.12.2012 13:51:18

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Inkompatibel mit Windows XP?

Das es geht ist ja die Hauptsache^^

Vll lag es ja an dem "or $10000000" in

Code:

 e := D3D9.CreateDevice(D3DADAPTER_DEFAULT,dtype,FormDX.Handle,vertexprocessing or $10000000,@d3dpp,D3DDev9);

Mache Flags dort gehen erst ab Vista aufwärts. Wofür hattest du das drin?

MfGnietschow

Beitrag geändert von Gnietschow (27.12.2012 13:51:50)


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#8 28.12.2012 14:00:39

Gewuerzgurke
Member
Registriert: 15.09.2008
Beiträge: 47
Web-Seite

Re: Inkompatibel mit Windows XP?

Aha, dann gibt es Direct3D 9Ex wohl ab Vista. Gut zu wissen.

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson