Problem mit Start3D

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
young_boy
Beiträge: 15
Registriert: 20.03.2005 14:51

Problem mit Start3D

Beitrag 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.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag 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
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

vielleicht ist auf deinem win98-rechner die DirektX-Version zu alt?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

@Kaeru Gaman
young_boy hat geschrieben:Der aktuelle DirectX für Win 98 ist installiert!
c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Welche Grafikkarte verschwendet denn einen Sockel auf deinem Mainboard?
Bild
young_boy
Beiträge: 15
Registriert: 20.03.2005 14:51

Beitrag 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?
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag 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
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
young_boy
Beiträge: 15
Registriert: 20.03.2005 14:51

Beitrag 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!
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag 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
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
young_boy
Beiträge: 15
Registriert: 20.03.2005 14:51

Beitrag 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)!
Antworten