Seite 1 von 2

Problem mit Start3D

Verfasst: 17.12.2005 23:28
von young_boy
Ich habe ein Problem mit diesem Code:

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitSprite3D()

OpenScreen(1024,768,16,"Hallo")
CreateSprite(0,64,64,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(0))
  Box(0,0,64,64,RGB(255,0,0))
StopDrawing()
CreateSprite3D(0,0)

Repeat
  ExamineKeyboard()
  Start3D()
    DisplaySprite3D(0,0,0,255)
  Stop3D()
  FlipBuffers()
  Delay(10)
Until KeyboardPushed(1)
Das ganze funktioniert auf meinem 'normalen' PC (XP) einwandfrei aber eben nicht auf meinem Win98er. Hier poppt nur kurz der neue Screen auf, der sich dann auch ganz schnell wieder schließt. Das Problem scheint bei Start3D zu liegen. Kommentiere ich dies (+ Displaysprite und Stop3d)aus so funktioniert das ganze! InitSprite3D() gibt noch 1 zurück, sollte also Ok sein.
Der aktuelle DirectX für Win 98 ist installiert!

In der Hoffnung, dass da jemad Rat weiß.
Hilfreich wäre es auch wenn andere Leute mit Win98 das ganze ausprobieren könnten.

Verfasst: 18.12.2005 01:26
von nco2k
teste doch einfach mal kurz ob auch wirklich nichts schiefgelaufen ist.

kann man natürlich schöner schreiben, dient jetzt nur als test:

Code: Alles auswählen

If InitSprite() = 0
  MessageRequester("", "InitSprite() Error")
  End
EndIf
If InitKeyboard() = 0
  MessageRequester("", "InitKeyboard() Error")
  End
EndIf
If InitSprite3D() = 0
  MessageRequester("", "InitSprite3D() Error")
  End
EndIf
If OpenScreen(1024,768,16,"Hallo") = 0
  MessageRequester("", "OpenScreen() Error")
  End
EndIf
If CreateSprite(0,64,64,#PB_Sprite_Texture) = 0
  MessageRequester("", "CreateSprite() Error")
  End
EndIf
If StartDrawing(SpriteOutput(0)) = 0
  MessageRequester("", "StartDrawing() Error")
  End
EndIf
Box(0,0,64,64,RGB(255,0,0))
StopDrawing()
If CreateSprite3D(0,0) = 0
  MessageRequester("", "CreateSprite3D() Error")
  End
EndIf
Repeat
  ExamineKeyboard()
  If Start3D() = 0
    MessageRequester("", "Start3D() Error")
    End
  EndIf
  DisplaySprite3D(0,0,0,255)
  Stop3D()
  FlipBuffers()
  Delay(10)
Until KeyboardPushed(1)
ich vermute, dass aus welchen gründen auch immer (treiber etc.), start3d nicht gestartet werden kann und deswegen das programm abstürzt.

man sollte bei Start3D(), StartDrawing() etc. immer überprüfen, ob es auch geklappt hat, weil es ansonsten zu schlimmen abstürzen kommen kann. wenn z.b. Start3D() nicht "geöffnet" werden konnte, versuchst du dennoch mit DisplaySprite3D() ein sprite anzuzeigen und mit Stop3D() eine engine zu schliessen, welche nicht aktiv ist.

so wärst du auf der sicheren seite:

Code: Alles auswählen

If InitSprite() And InitSprite3D() And InitKeyboard() And OpenScreen(1024,768,16,"Hallo")
  
  If CreateSprite(0,64,64,#PB_Sprite_Texture)
    If StartDrawing(SpriteOutput(0))
      Box(0,0,64,64,RGB(255,0,0))
      StopDrawing()
    EndIf
    CreateSprite3D(0,0)
  EndIf
  
  Repeat
    ClearScreen(0,0,0)
    If IsSprite3D(0) And Start3D()
      DisplaySprite3D(0,0,0,255)
      Stop3D()
    EndIf
    FlipBuffers()
    Delay(10)
    ExamineKeyboard()
  Until KeyboardPushed(1)
  
EndIf
c ya,
nco2k

Verfasst: 18.12.2005 01:29
von Kaeru Gaman
vielleicht ist auf deinem win98-rechner die DirektX-Version zu alt?

Verfasst: 18.12.2005 01:32
von nco2k
@Kaeru Gaman
young_boy hat geschrieben:Der aktuelle DirectX für Win 98 ist installiert!
c ya,
nco2k

Verfasst: 18.12.2005 01:39
von MVXA
Welche Grafikkarte verschwendet denn einen Sockel auf deinem Mainboard?

Verfasst: 18.12.2005 12:30
von young_boy
So danke schon mal für die ersten Antworten!
@nco2k: Wenn ich deinen Code laufen lasse passiert genau das Selbe wie ich schon oben beschrieben habe: Keine Fehlermeldung, nichts nur ein kurz aufblitzender schwarzer Bildschirm, der sich im nächten Moment wieder schließt. Wie ich schon gesagt habe scheint das Problem bei Start3D zu liegen. Start3D gibt nämlich gar nichts zurück, es schließt das Programm automatisch ohne jegliche Fehlermeldung (Auch von Windows kommt nichts!).

@MVXA: Grafikkarte: S3 Trio32/64 PCI (732/764)


Wenn ich dxdiag bei Ausführen eingebe, dann erscheint auf dem 3. Register unten bei Direct3D Beschleunigng: Nicht verfügbar. Bei meinem XP-Rechner steht hier Aktiviert. Könnte das die Ursache des Fehlers sein?

Verfasst: 18.12.2005 12:35
von nco2k
young_boy hat geschrieben:Wenn ich dxdiag bei Ausführen eingebe, dann erscheint auf dem 3. Register unten bei Direct3D Beschleunigng: Nicht verfügbar. Bei meinem XP-Rechner steht hier Aktiviert. Könnte das die Ursache des Fehlers sein?
ja. afaik bauen 3d sprites auf Direct3D auf und brauchen dafür auch eine 3d beschleuniger (fähige) karte. was ich aber nicht verstehe, wieso dann pb keine fehlermeldung ausgibt. start3d wird trotzdem weiter ausgeführt. komisch.

c ya,
nco2k

Verfasst: 18.12.2005 13:20
von young_boy
ja. afaik bauen 3d sprites auf Direct3D auf und brauchen dafür auch eine 3d beschleuniger (fähige) karte. was ich aber nicht verstehe, wieso dann pb keine fehlermeldung ausgibt. start3d wird trotzdem weiter ausgeführt. komisch.
Vor allem müsste InitSprite3D() doch 0 liefern wenn diese Direct3D unterstützung nicht vorhanden ist. Bei mir liefert InitSprite3D() aber 1!

Gibt es einen Weg über PureBasic zu prüfen ob Direct3D verfügbar ist oder nicht? In meinem Programm Diashow-Producer sorgt nämlich vermutlich genau dieser Fehler für Probleme. Da wäre es hilfreich, wenn ich prüfen könnte ob es verfügbar ist und um dann im negativen Fall eine Fehlermeldung auszugeben!

Verfasst: 18.12.2005 13:33
von nco2k
es kann ja sein, dass es verfügbar ist, aber eben "nur" deaktiviert.

ich werde die sache mal überprüfen und ggf. den "bug" im englischen forum melden.

c ya,
nco2k

Verfasst: 18.12.2005 14:17
von young_boy
@nco2k: Danke!:allright:

Noch ne kleine Info:
Direct3D ist bei mir aber, wenn man dem DirectX-Diagnoseprogramm glauben schenkt, wirklich nicht verfügbar und nicht deaktiviert sonst würde ja deaktiviert dastehen (Der Deaktivieren Button ist auch disabled er wäre enabled wenn Direct3D verfügbar wäre)!