ScreenOutput() - Fehler im neuen PB 4.40

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
loejen
Beiträge: 5
Registriert: 28.12.2009 15:14

ScreenOutput() - Fehler im neuen PB 4.40

Beitrag von loejen »

Hallo Zusammen,

ich habe ein Problem mit

Code: Alles auswählen

ScreenOutput()
im neuen PB V4.40.

Zuerst zu meinem System: Ich nutze eine Multi Desktop Umgebung mit 3 Bildschirmen.
Die Auflösung des primären Bildschirms ist 1920x1200. Die später benutze Auflösung von
1024x768 Pixeln unterstützt der Monitor natürlich auch. Als Betriebssystem benutze ich
Windows 7.

Nun habe ich unter PB V4.40 das Testprogramm aus dem Pure Basic Learning Buch von S. 186/187
ausgeführt:

Code: Alles auswählen

#IMAGE_MAIN = 1
;Set the width, height and bit depth of the screen
;Abbreviated variables are used here due to page width constraints :(
Global ScrW.l = 1024
Global ScrH.l = 768
Global ScrD.l = 32
Global Quit.b = #False
XOrigin.f = (ScrW / 2) - 64 : YOrigin.f = (ScrH / 2) - 64
;Simple error checking procedure
Procedure HandleError(Result.l, Text.s)
If Result = 0
MessageRequester("Error", Text, #PB_MessageRequester_Ok)
End
EndIf
EndProcedure
;Initialize environment
HandleError(InitSprite(), "InitSprite() command failed.")
HandleError(InitKeyboard(), "InitKeyboard() command failed.")
HandleError(OpenScreen(ScrW, ScrH, ScrD, "Blobs"), "Could not open screen.")
SetFrameRate(60)
;Create an image
If CreateImage(#IMAGE_MAIN, 128, 128)
If StartDrawing(ImageOutput(#IMAGE_MAIN))
For x.l = 255 To 0 Step -1
Circle(64, 64, x / 4, RGB(0, 0, 255 - x))
Next x
StopDrawing()
EndIf
EndIf
;Convert Degrees to Radians
Procedure.f DegToRad(Angle.f)
ProcedureReturn Angle.f * #PI / 180
EndProcedure
;Main loop
Repeat
ClearScreen(RGB(0, 0, 0))
Angle.f + 2.0
Radius.f = ((ScrH / 2) - 100) * Sin(DegToRad(Angle))
StartDrawing(ScreenOutput())
For x.l = 0 To 359 Step 45
XPos.f = XOrigin + (Radius * Cos(DegToRad(Angle + x)))
YPos.f = YOrigin + (Radius * Sin(DegToRad(Angle + x)))
DrawImage(ImageID(#IMAGE_MAIN), XPos, YPos)
Next x
StopDrawing()
FlipBuffers()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
Quit = #True
EndIf
Until Quit = #True
End
Es müssten doch mittels

Code: Alles auswählen

StartDrawing(ScreenOutput())
ganz normal Zeichenbefehle auf den Screenbuffer gezeichnet werden.
Bei mir öffnet sich der Screen auf meinem Primärbildschirm für 3 Sekunden, bis der
Debugger mit folgendem Fehler abbricht:

Bild

Führe ich das Programm unter PB 4.31 aus funktioniert der selbe Code einwandfrei.
Unter PB 4.40 funktioniert dieser Code nur ohne Fehler, wenn ich einen Screen mit
der nativen Auflösung des primären Anzeigegeräts (1920x1200) einstelle oder wenn ich
die erweiterten Bildschirme deaktiviere, so dass nur der Primärbildschirm aktiviert ist.
Ansonsten kommt eben obiger Fehler. Mache ich irgendetwas falsch oder ist das ein
Bug in der neuen PB-Version?

Danke und Grüße
loejen
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Re: ScreenOutput() - Fehler im neuen PB 4.40

Beitrag von kswb73 »

Schon mal mit dem DirectX7 Subsystem versucht. In 4.31 wurde noch DirectX7 verwendet. 4.4 hingegen verwendet DirectX9, was aber noch nicht ganz ausgereift ist.
Du kannst die Einstellungen für das Subsystem ändern, indem du auf Compiler --> Compiler-Optionen klick und dann bei Subsystem DirectX7 eingibst.
Bei mir funktioniert dein Code jedenfall mit PureBasic 4.4 und DirectX9.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
loejen
Beiträge: 5
Registriert: 28.12.2009 15:14

Re: ScreenOutput() - Fehler im neuen PB 4.40

Beitrag von loejen »

Hallo,

danke für die schnelle Antwort.
Mit DirectX7 funktioniert es einwandfrei.
Kann ich irgendwelche neuen Funktionen nicht nutzen,
da ich jetzt DirectX7 statt DirectX9 benutzen muss bzw. hat
das irgendwelche Nachteile?

Gruß
loejen
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ScreenOutput() - Fehler im neuen PB 4.40

Beitrag von ts-soft »

loejen hat geschrieben:bzw. hat
das irgendwelche Nachteile?

Gruß
loejen
Bei Fullscreen sollte es egal sein, im Windowed Modus wäre es unschön, weil durch directx7 Programme
AERO deaktiviert wird.

PS: hab im moment nur einen Monitor dran, kanns also nicht testen, mit nur einem funktioniert alles.

Gruß
Thomas
loejen
Beiträge: 5
Registriert: 28.12.2009 15:14

Re: ScreenOutput() - Fehler im neuen PB 4.40

Beitrag von loejen »

Hallo Zusammen,

danke für die bisherigen Antworten.

Ich gehe ja gerade das Pure Basic Beginners Buch durch und bin nun von 2D bei 3D angelangt.
Dort tritt ein weiteres Problem bei allen Programmen, die etwas laden, auf:
Es können keine Meshes, Texturen oder Sonstiges geladen werden.
Unter meinem anderen Laptop unter XP geht alles auch mit PB V4.40 fehlerfrei.
Unter Windows 7 lädt er gar nichts.

Hat irgendjemand eine Ahnung woran das liegen könnte?
Ich habe in einem Thema gelesen, dass es auch von der Grafikkarte abhänge.
Ich nutze eine 8800GTS und eine 9500GT mit dem neuesten NVIDIA-Treiber ohne jegliche Probleme.
Hat PureBasic evtl. mit den beiden Karten Schwierigkeiten? Dürfte ja eigentlich nicht sein da der NVIDIA-Treiber
alles regelt.
Die Dateien liegen in dem richtigen Ordner/ZIP-File, add3darchive wurde auch aufgerufen.

Gruß
loejen
loejen
Beiträge: 5
Registriert: 28.12.2009 15:14

Re: ScreenOutput() - Fehler im neuen PB 4.40

Beitrag von loejen »

Hallo,

ich hoffe das ist nicht zu sehr Off-Topic:

Das Problem besteht nicht nur bei Meshes und anderen Dateien
aus dem 3D Bereich, sondern bei allen Dingen die zu laden sind.
Also auch bei Sound-Files, etc...
Ich habe bereits mehrmals PureBasic neu installiert aber der Fehler besteht weiterhin.
Auf einm anderen Windows 7 PC habe ich auch die Beispiele noch einmal getestet dort
laufen sie jedoch einwandfrei?
Zudem ist mir aufgefallen, dass bei mir in der PB IDE gar keine Icons bei den Menüeinträgen angezeigt werden?

Muss ich irgendetwas an meiner Konfiguration ändern?
Nach der Neuinstallation müsste doch alles auf die Default-Werte gesetzt sein, oder?

Danke und Gruß
loejen
Antworten